Bigquery:如何在将查询结果附加到表时保留REPEATED属性

时间:2016-04-29 13:34:30

标签: google-bigquery

我有一个BQ表,其中一列是REPEATED类型,我正在尝试使用Google App Engine中的Python客户端库创建一个新表,其中重新计算了一些列并添加了几列。

使用下面的配置,副本确实有效,但arguments列(源表中的REPEATED列)被展平为多行。 如何保留列的REPEATED-ness?我们知道这是可能的,因为Web UI可以做到,但我找不到任何关于如何使用Python客户端库执行此操作的文档。 / p>

query_sql = """
SELECT _id,app_name,user,source,function,arguments,startT,deltaT,ip_addr,location,session,agent FROM 
  (select _id, app_name,user,'server' as source, function,arguments,startT,deltaT,ip_addr,'eng.example.com' as location,session,agent from [probe_data.mini_probe_data] 
      where app_name = 'smeng' 
      and user is not null 
      and not function contains 'ajax'), 
  (select _id, app_name,user,'browser' as source,function,arguments,startT,deltaT,ip_addr,'eng.example.com' as location,session,agent from [probe_data.mini_probe_data] 
      where app_name = 'smeng' 
      and user is not null 
      and function contains 'ajax'),
"""
jobData = {
    "projectId": project_id,
    "configuration": {
        "query": {
            "query": query_sql,
            "destinationTable": {
                "projectId": project_id,
                "datasetId": dataset_id,
                "tableId": tbl_dst,
            },
            "createDisposition": "CREATE_IF_NEEDED",
            "writeDisposition": "WRITE_APPEND",
        }
    }
}

为了澄清,writeDisposition需要WRITE_APPEND,因为我将组合来自多个表的数据,但这是为了稍后,当这部分工作时。

我已经阅读了大部分有关复制和通过客户端API转换BigQuery表的文档,例如managing tablesthis SO discussion等。

1 个答案:

答案 0 :(得分:0)

我相信您需要添加flattenResults:False以确保查询结果不会被展平。

来自文档:

  

作业[]。configuration.query.flattenResults

     

布尔

     

[可选]   展平查询结果中的所有嵌套和重复字段。该   默认值为true。如果设置了allowLargeResults,则它必须为true   为假。