插入具有重复记录列的表中(有问题的屏幕)

Posted

技术标签:

【中文标题】插入具有重复记录列的表中(有问题的屏幕)【英文标题】:Insert into table with record column which is repeated (screen in question) 【发布时间】:2019-07-05 15:02:54 【问题描述】:

我在带有结构的 bigquery 中有表

以及将数据插入测试记录的问题

我尝试用这种方式插入:

query = (
   """
   INSERT INTO test.qwe (name, nick, test)  
   VALUES(@name, @nick, @test)
   """
)
hitTimeStamp = int(time.time())
query_params = [
   bigquery.ScalarQueryParameter("name", "STRING", hitTimeStamp),
   bigquery.ArrayQueryParameter("nick", "STRING", ["k","TEST"]),
   bigquery.StructQueryParameter(
      "test",
       bigquery.ArrayQueryParameter("a", "STRING", ["adsfwerf","d"]),
       bigquery.ArrayQueryParameter("b", "STRING", ["asda","sdfds"]),
   ),
]
job_config = bigquery.QueryJobConfig()
job_config.query_parameters = query_params
query_job = client.query(
   query,
   location="US",
   job_config=job_config,
)

我预计数据会被插入!请...

【问题讨论】:

我已经明白了我的代码在这个struct中插入数据-monosnap.com/direct/1sEuynps8iM6QVldR5CArVQnXq8Ru6但是如何在上一个表中插入数据呢?它们之间有什么区别? 【参考方案1】:

现在我发现了几个问题:

    您将nick 视为一个数组,但它被定义为STRING。 您将test 视为包含数组的结构,但NESTED REPEATED 实际上是包含结构数组

不幸的是,您使用的 google-cloud-python 库中的帮助程序似乎不能正确支持创建 NESTED REPEATED(结构数组)字段所需的输出。有一个 issue noting this 当前处于“To Do”状态(尽管被标记为已关闭,但没有解决方案)。

这可以通过其他库以及 BigQuery DML 语法中的本机实现,如下所示:

INSERT INTO test.qwe (name,nick,test)
VALUES(
  "name value",
  "nick value",
  [
    STRUCT("adsfwerf" AS a,"asda" AS b),
    STRUCT("d" AS a,"sdfds" AS b)
  ]
)

(请注意,有几种不同的语法可用于处理 ARRAYSTRUCT 类型,但这是最简洁的,这也是我在这里选择它的原因。)

因此,作为一种解决方法,您始终可以在 google-cloud-python 提供的帮助程序之外构建查询,然后运行它。您可能还想查看该问题线程,看看项目维护人员是否可以提供任何其他解决方法或帮助添加该功能 - 或者您可能需要寻找另一个完全支持 NESTED REPEATED 字段周围功能的库。

【讨论】:

以上是关于插入具有重复记录列的表中(有问题的屏幕)的主要内容,如果未能解决你的问题,请参考以下文章

允许从重复记录中的一条记录到具有主键的表中

将记录插入到具有180列的表中

从具有 NULL 列的大表中删除重复项,这也需要考虑

在具有标识列的表中插入 select from

MySQL 从具有重复引用条目的联合表中选择唯一记录

如何从没有ID的表中删除重复(重复)记录,行[重复]