如何在 Bigquery 中使用带有列号引用的 insert All 插入数据?

How to insert data using insertAll with column number reference in Big Query?

我正在使用流式插入函数 insertAll() 将数据插入到我的大查询中 table。

我正在使用地图和列表,如 BQ 文档中的 Java 代码示例所示 - bq docs link

Map<String, Object> row = new HashMap<>();
List<InsertAllRequest.RowToInsert> rowContent = new ArrayList<>();

地图 row 包含一行每一列的数据,在读取整行后,我将其添加到 rowContent。后来我将它传递给 insertAll() 函数,该函数采用如下声明的可迭代对象:

Iterable<InsertAllRequest.RowToInsert> rows

现在我的主要问题是:

我通过引用 BQ 列名称将一行的每一列添加到地图中,例如:

row.put("columnName", value)

有没有办法使用列号而不是名称?

例如:

row.put(0, value0)
row.put(1, value1)
row.put(2, value2)

AFAIK,它不是 orderedMap,我会说不。但是,你可以作弊。

使用列名数组

// Init
String[] columnNames = new String[3];
columnNames[0] = "Column1";
columnNames[1] = "Column2";
columnNames[2] = "Column3";

然后,在您的 put 中执行此操作

row.put(columnNames[0], value0)
row.put(columnNames[1], value1)
row.put(columnNames[2], value2)

您甚至可以想象通过在开始流式传输之前读取 table 元数据来动态创建 columnNames 数组。