bq 命令行工具 - 如何插入具有嵌套字段的大查询表?

Posted

技术标签:

【中文标题】bq 命令行工具 - 如何插入具有嵌套字段的大查询表?【英文标题】:bq command line tool - How to insert into Big query tables that has nested fields? 【发布时间】:2016-12-17 06:36:53 【问题描述】:

我有三个 BigQuery 表,如下所示

员工

Employee_id | Department_id | Location_id | Name | Age

部门

Department_id | Department_Name | Department_Code

位置

Location_id | Country | State | City

下面的查询用于连接所有三个表,

SELECT
  e.Employee_id,
  e.Name,
  e.Age,
  e.Department_id,
  d.Department_Name,
  d.Department_Code,
  l.Location_id,
  l.Country , 
  l.State,
  l.City
FROM Employee e
JOIN Department d
  ON e.Department_id = d. Department_id
JOIN Location l
  ON e.Location_id = l.Location_id

如何使用 bq 命令行实用程序(bq 查询命令)将此结果集插入到具有嵌套字段的以下架构的 BigQuery 表中?

【问题讨论】:

【参考方案1】:

如何将此结果集插入到具有嵌套字段的以下架构的 BigQuery 表中?

以下是BigQuery Standard SQL

SELECT
    e.Employee_id,
    e.Name,
    e.Age,
    STRUCT<Department_id STRING, Department_Name STRING, Department_Code STRING>(
                  e.Department_id, d.Department_Name, d.Department_Code) AS Department,
    STRUCT<Location_id STRING, Country STRING, State STRING, City STRING>(
                                l.Location_id, l.Country, l.State, l.City) AS Location
FROM Employee e
JOIN Department d
    ON e.Department_id = d. Department_id
JOIN Location l
    ON e.Location_id = l.Location_id

...使用 bq 命令行实用程序(bq 查询命令)?

bq query --use_legacy_sql=false --append_table --destination_table 'dataset.table' '**`above query`**'

查看here和bq-command-line-tool了解更多详情

【讨论】:

谢谢。按预期工作。但是如何在查询中表示多级(嵌套字段内的嵌套记录)嵌套字段? 自己解决了。应表示如下,SELECT field1, field2, Struct&lt;Parent_id String, Child Struct&lt; id INT64, name String&gt; &gt; ("Parent_id", (1,"name")) FROM Your_Table 旧版 SQL 不支持结构。如何在 Legacy SQL 中实现相同的功能?

以上是关于bq 命令行工具 - 如何插入具有嵌套字段的大查询表?的主要内容,如果未能解决你的问题,请参考以下文章

我可以使用 BQ 命令行工具从 Windows 命令提示符中的文件运行查询吗?

bq 命令行工具使用 --format=none 暂时挂起吃内存

BQ 命令行工具出错:无法在没有项目 ID 的情况下启动作业

BigQuery 从 bq 命令行工具加载数据 - 如何跳过标题行

如何获取在 BigQuery 命令行工具中运行的最后一个作业的作业 ID?

如何在 BQ 命令行中设置 Bigquery 需要分区过滤器