让 BigQuery 自动检测架构

Posted

技术标签:

【中文标题】让 BigQuery 自动检测架构【英文标题】:Getting BigQuery to auto detect schema 【发布时间】:2016-04-17 01:08:45 【问题描述】:

我正在尝试加载 csv 文件并让 BigQuery 自动创建架构。

bq load --source_format CSV -F '\t'  --skip_leading_rows=1 voterdb.voters gs://[[ redacted bucket ]]/extract.csv
BigQuery error in load operation: Error processing job 'tokyo-unity-87516:bqjob_r3682474e46ce720f_0000015421aee065_1': No schema specified on job or table.

根据https://cloud.google.com/bigquery/federated-data-sources 支持自动创建/推断架构。

【问题讨论】:

【参考方案1】:

--autodetect 标志可能是您想要的。它适用于 CSV 和(换行符分隔的)JSON 输入文件。

例如...

bq load --source_format=NEWLINE_DELIMITED_JSON --autodetect yourdataset.yourtable inputfile.json

在此处查看文档:https://cloud.google.com/bigquery/bq-command-line-tool#creatingtablefromfile

请注意,这与联合数据源无关。

【讨论】:

【参考方案2】:

如上一个答案所述,模式自动检测是联合数据源查询的一部分。在CSV and JSON schema auto-detection 标题下没有明确说明这不适用于bq load。如果您觉得文档中不清楚这一点,我强烈建议您点击该文档页面右上角的发送反馈,并详细描述这种歧义。

至于bq load命令,根据bq load documentation,表schema是必填参数。省略它会导致您面临的错误消息。

编辑 感谢 polleyg 的更新。在this blog post 中,宣布还应在加载时检测到模式。正如 Chris Sears 所说,--autodetect 标志应该可以满足您的需求。

【讨论】:

根据这篇博文 (cloud.google.com/blog/big-data/2016/03/…),自动模式检测也支持加载 - “这在加载时适用于 CSV、JSON 和 AVRO” 这不再正确。请参阅我对--autodetect 的回答。【参考方案3】:

这里是 node js 的解决方案。

const filename = "path of file to be uploaded";
const metadata = 
        sourceFormat: 'CSV',
        skipLeadingRows: 1,
        autodetect: true,
    ;
const dataset =await 
bigQuery.dataset('datasetname').table('tablename').load(filename,metadata);

【讨论】:

【参考方案4】:

您引用的每个链接 - 当您直接 query 联合数据源时,BigQuery 支持自动创建/推断架构。 您收到的错误是来自 GCS 的 load

【讨论】:

以上是关于让 BigQuery 自动检测架构的主要内容,如果未能解决你的问题,请参考以下文章

使用自动检测的动态 BigQuery 架构:错误架构没有字段

BigQuery 自动检测架构导致加载 Google Drive CSV 失败

在 Bigquery 中查询外部表并且新数据到达时没有架构自动检测

BigQuery - 通过应用脚本上传带有模式自动检测的 csv

为 BigQuery 自动检测 GCS 中的更改

BigQuery 自动检测不适用于不一致的 json?