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

发布于 2021-01-29 14:09:59

背景

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

例如:

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

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

询问

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

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

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

关注者
0
被浏览
191
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您可以对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   |
    +------+------+----------+--------+--------+
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看