【问题标题】:How to insert data using insertAll with column number reference in Big Query?如何在 Bigquery 中使用带有列号引用的 insert All 插入数据?
【发布时间】:2021-02-10 02:37:06
【问题描述】:

我正在使用流式插入函数 insertAll() 将数据插入到我的 Big Query 表中。

我正在使用 BQ Docs 中的 Java 代码示例中所示的 Map 和 List - bq docs link

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

地图row 包含一行每一列的数据,在读取整行后,我将其添加到rowContent。稍后我将它传递给insertAll() 函数,该函数接受一个像这样声明的可迭代对象:

Iterable&lt;InsertAllRequest.RowToInsert&gt; rows

现在我的主要问题在这里:

我通过引用 BQ 列名称将一行的每一列添加到 Map:

row.put("columnName", value)

有没有办法使用列号代替名称?

例如:

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

【问题讨论】:

    标签: google-cloud-platform google-bigquery terraform-provider-gcp


    【解决方案1】:

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

    使用 ColumnName 数组

    // 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)
    

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

    【讨论】:

    • 好的,谢谢。这正是我之前的想法,并且已经实现了。
    猜你喜欢
    • 1970-01-01
    • 2020-04-28
    • 1970-01-01
    • 2016-06-17
    • 2021-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多