使用 insertAll 时丢失行 - BigQuery

Posted

技术标签:

【中文标题】使用 insertAll 时丢失行 - BigQuery【英文标题】:Getting missing row while using insertAll - BigQuery 【发布时间】:2016-05-03 11:00:14 【问题描述】:

在将数据插入 BigQuery 时,我在响应中出现无效原因的缺失行。

"errors":["message":"Missing row.","re​​ason":"invalid"],"index":0, "errors":["message":"Missing行。","原因":"无效"]

下面是我正在执行的代码:

/以下行调用dfp API来获取所有adunits AdUnitPage page = inventoryService.getAdUnitsByStatement(statementBuilder.toStatement()); 列表 dfpadunits = new ArrayList();

                if (page.getResults() != null) 
                    totalResultSetSize = page.getTotalResultSetSize();
                    int i = page.getStartIndex();
                    for (AdUnit adUnit : page.getResults()) 
                        /*System.out.printf(
                                "%d) Ad unit with ID '%s' and name '%s' was found.%n", i++,
                                adUnit.getId(), adUnit.getName());*/

                        //Map<String,Object> dfpadunitrow = new HashMap<String,Object>();
                        //dfpadunitrow.put(adUnit.getId(), adUnit.getName());
                        Rows dfpadunit = new TableDataInsertAllRequest.Rows();
                        dfpadunit.setInsertId(adUnit.getId());
                        dfpadunit.set("id",adUnit.getId());
                        dfpadunit.set("name",adUnit.getName());
                        dfpadunits.add(dfpadunit);

                    
                

                TableDataInsertAllRequest content = new TableDataInsertAllRequest();
                content.setRows(dfpadunits);
                content.setSkipInvalidRows(true);
                content.setIgnoreUnknownValues(true);
                System.out.println(dfpadunits.get(0));
                Bigquery.Tabledata.InsertAll request = bigqueryService.tabledata().insertAll(projectId, datasetId, tableId, content);
                TableDataInsertAllResponse response = request.execute();
                System.out.println(response.getInsertErrors());

我使用记录器来检查我的数据是否正确填充,但是当我尝试使用 insertAll 将记录插入到 bigquery 中时,我得到了响应无效的行。

谢谢, 卡皮尔

【问题讨论】:

我的回答对你有用吗? 【参考方案1】:

您需要使用TableRow 对象。这有效(我测试过):

TableDataInsertAllRequest.Rows dfpadunit = new TableDataInsertAllRequest.Rows();

TableRow row = new TableRow();
row.set("id",adUnit.getId());
row.set("name",adUnit.getName());

dfpadunit.setInsertId(adUnit.getId());
dfpadunit.setJson(row);

dfpadunits.add(dfpadunit);

【讨论】:

以上是关于使用 insertAll 时丢失行 - BigQuery的主要内容,如果未能解决你的问题,请参考以下文章

使用 insertAll 时 Appscript 中的大查询解析错误

sql [BigQuery - Facebook产品目录]查询para obtenerelcatálogodeproductos de Kichink。 #facebook #bigqu

无法使用 table.insertall() 将任何数据上传到 bigquery

Scala slick 2.0 updateAll 等同于 insertALL?

ThinkPHP 5 insertall 只插入最后一条数据的问题

数据流导出到 Bigquery:insertAll 错误,无效的表引用