当前位置: 首页 > 面试题库 >

如何将非结构化数据插入/附加到bigquery表

胡俊美
2023-03-14
问题内容

背景

我想bigquery通过python客户端API将换行格式的JSON插入/添加到表中。

例如:

{"name":"xyz",mobile:xxx,location:"abc"}
{"name":"xyz",mobile:xxx,age:22}

问题是,一行中的所有字段都是可选的,并且没有针对数据的固定定义模式。

询问

我已经读过我们可以使用支持自动模式检测的联合表。

但是,我正在寻找一种功能,该功能将自动从数据中检测模式,相应地创建表,甚至在数据中出现任何额外的列/键而不是创建新表时甚至调整表模式。

使用python客户端API是否有可能。


问题答案:

您可以对BigQuery加载API使用自动检测,即使用bq cli工具的示例如下所示:

~$ cat /tmp/x.json
{"name":"xyz","mobile":"xxx","location":"abc"}
{"name":"xyz","mobile":"xxx","age":"22"}

~$ bq load --autodetect --source_format=NEWLINE_DELIMITED_JSON tmp.x /tmp/x.json
Upload complete.

~$ bq show tmp.x
Table tmp.x

   Last modified          Schema          Total Rows   Total Bytes   Expiration  
 ----------------- --------------------- ------------ ------------- ------------ 
  16 Aug 08:23:35   |- age: integer       2            33                        
                    |- location: string                                          
                    |- mobile: string                                            
                    |- name: string


~$ bq query "select * from tmp.x"

+------+----------+--------+------+
| age  | location | mobile | name |
+------+----------+--------+------+
| NULL | abc      | xxx    | xyz  |
|   22 | NULL     | xxx    | xyz  |
+------+----------+--------+------+

更新:
如果以后需要添加其他字段,则可以使用schema_update_option允许新字段。遗憾的是,它还不能与自动检测一起使用,因此您需要为负载API明确提供新的架构:

~$ cat /tmp/x1.json 
{"name":"abc","mobile":"yyy","age":"25","gender":"male"}

~$ bq load --schema=name:STRING,age:INTEGER,location:STRING,mobile:STRING,gender:STRING --schema_update_option=ALLOW_FIELD_ADDITION --source_format=NEWLINE_DELIMITED_JSON tmp.x /tmp/x1.json
Upload complete.

~$ bq show tmp.x
Table tmp.x

   Last modified          Schema          Total Rows   Total Bytes   Expiration  
 ----------------- --------------------- ------------ ------------- -----------
  19 Aug 10:43:09   |- name: string       3            57                        
                    |- age: integer                                              
                    |- location: string                                          
                    |- mobile: string                                            
                    |- gender: string


~$ bq query "select * from tmp.x"
status: DONE   
+------+------+----------+--------+--------+
| name | age  | location | mobile | gender |
+------+------+----------+--------+--------+
| abc  |   25 | NULL     | yyy    | male   |
| xyz  | NULL | abc      | xxx    | NULL   |
| xyz  |   22 | NULL     | xxx    | NULL   |
+------+------+----------+--------+--------+


 类似资料:
  • 我有一个带有MongoDB的Nodejs应用程序。现在我想使用Elasticsearch将数据从mongo复制到Elasticsearch。我正在使用npm软件包“ElasticSearch”。例如,对于收藏“帖子”,我有这样的: 正如您所看到的,我的数据是非结构化的,并且Elasticsearch在我添加这些项时显示了错误。我想要一个把戏关闭弹性搜索限制,允许我添加这些数据。我不能改变我的数据它

  • 问题内容: 我正在尝试创建一个将条目添加到json文件的函数。最终,我想要一个看起来像 等。这就是我所拥有的: 这确实会创建一个条目,例如。但是,如果我再次使用此函数(使用不同的名称和网址),第一个函数将被覆盖。我需要怎么做才能将第二个(第三个…)条目附加到第一个? 编辑 :对此问题的第一个答案和评论已经指出了我在写块中未使用的明显事实。不过,我看不出该怎么做。例如,以下内容显然不会起作用: 问题

  • 这是我运行strm.py文件的终端命令 $spark_home/bin/spark-submit--主本地--驱动程序-内存4G--num-executors 2--executor-memory 4G--包org.apache.spark:spark-sql-kafka-0-102.11:2.4.0 org.apache.spark:spark-cassandra-connector2.11:2

  • 本文向大家介绍结构化,半结构化和非结构化数据之间的差异,包括了结构化,半结构化和非结构化数据之间的差异的使用技巧和注意事项,需要的朋友参考一下 在大数据方面,我们知道它处理大量数据及其执行。简而言之,我们可以说大数据是一种处理大量数据的事物,并且由于数据量如此之大,因此从广义上讲,根据数据的组织方式定义了三类,即结构化,半结构化和非结构化数据。 现在,根据组织数据的级别,我们可以发现这三种类型的数

  • 问题内容: 我可以使用Golang将平面对象插入BigQuery中-如何将嵌套数据插入表中? 我的BigQuery模式如下所示(从示例中): 我的第一次插入尝试如下所示(示例): 哪个变平并插入没有问题。我只是在用visit_duration 但是,我需要遍历一个片段并添加到访问记录中。我试图建立一个 访问 对象(没有要测试的循环)并将其添加到行中,但它没有插入,并且我没有收到任何错误: - -[

  • 问题内容: 我正在使用AJAX将数据附加到div元素,从JavaScript填充div,如何在不丢失div中找到的先前数据的情况下将新数据附加到div? 问题答案: 尝试这个: