BQ命令行如何使用" - noflatten_results"具有嵌套字段的选项

时间:2016-04-08 09:55:05

标签: google-bigquery

我需要使用嵌套和重复字段查询表,使用bq命令行给我扁平化结果,而我需要将结果作为原始格式。

enter image description here

原始格式看起来像

{
    "fields": [
      {
        "fields": [
          {
            "mode": "REQUIRED",
            "name": "version",
            "type": "STRING"
          },
          {
            "mode": "REQUIRED",
            "name": "hash",
            "type": "STRING"
          },
          {
            "mode": "REQUIRED",
            "name": "header",
            "type": "STRING"
          },
          {
            "name": "organization",
            "type": "STRING"
          },
          {
            "mode": "REQUIRED",
            "name": "date",
            "type": "TIMESTAMP"
          },
          {
            "mode": "REQUIRED",
            "name": "encoding",
            "type": "STRING"
          },
          {
            "mode": "REQUIRED",
            "name": "message_type",
            "type": "STRING"
          },
          {
            "mode": "REQUIRED",
            "name": "receiver_code",
            "type": "STRING"
          },
          {
            "mode": "REQUIRED",
            "name": "sender_code",
            "type": "INTEGER"
          },
          {
            "mode": "REQUIRED",
            "name": "segment_separator",
            "type": "STRING"
          },
          {
            "fields": [
              {
                "fields": [
                  {
                    "name": "name",
                    "type": "STRING"
                  },
                  {
                    "name": "description",
                    "type": "STRING"
                  },
                  {
                    "name": "value",
                    "type": "STRING"
                  },
                  {
                    "fields": [
                      {
                        "name": "name",
                        "type": "STRING"
                      },
                      {
                        "name": "description",
                        "type": "STRING"
                      },
                      {
                        "name": "value",
                        "type": "STRING"
                      }
                    ],
                    "mode": "REPEATED",
                    "name": "composite_elements",
                    "type": "RECORD"
                  }
                ],
                "mode": "REPEATED",
                "name": "elements",
                "type": "RECORD"
              },
              {
                "name": "description",
                "type": "STRING"
              },
              {
                "mode": "REQUIRED",
                "name": "name",
                "type": "STRING"
              }
            ],
            "mode": "REPEATED",
            "name": "segments",
            "type": "RECORD"
          },
          {
            "mode": "REQUIRED",
            "name": "message_identifier",
            "type": "INTEGER"
          },
          {
            "mode": "REQUIRED",
            "name": "element_separator",
            "type": "STRING"
          },
          {
            "name": "composite_element_separator",
            "type": "STRING"
          }
        ],
        "mode": "REPEATED",
        "name": "messages",
        "type": "RECORD"
      },
      {
        "mode": "REQUIRED",
        "name": "syntax",
        "type": "STRING"
      },
      {
        "mode": "REQUIRED",
        "name": "encoding",
        "type": "STRING"
      },
      {
        "mode": "REQUIRED",
        "name": "file_name",
        "type": "STRING"
      },
      {
        "mode": "REQUIRED",
        "name": "size",
        "type": "INTEGER"
      }
    ]
  }

那么如何使用嵌套表示法导出(本地)数据?

[编辑]

导出到Google以嵌套代表

它似乎是导出嵌套表示的唯一解决方案,它将导出到表格,然后提取到Google存储,最后下载文件。

bq query --destination_table=DEV.EDI_DATA_EXPORT --replace \
--allow_large_results --noflatten_results \
"select * from DEV.EDI_DATA where syntax='EDIFACT' " \
 && bq extract --destination_format=NEWLINE_DELIMITED_JSON DEV.EDI_DATA_EXPORT gs://mybucket/data.json \
 && gsutil cp gs://mybucket/data.json .

令我惊讶的是......

1 个答案:

答案 0 :(得分:0)

每当您使用-noflatten_results时,您还必须使用--allow_large_results--destination_table。这会将未展平的结果存储在新表中。