让 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 中查询外部表并且新数据到达时没有架构自动检测