google-bigquery - 使用nodejs从avro上传到bigquery中删除root
问题描述
刚开始使用 bigquery 并试图找到将 db 表上传到 bq 的最佳方法。我们一直在使用 avsc 库将表格内容转换为 avro,因为从所有文档看来,avro 是加载它的最快方式,但它向架构添加了一个根元素,因此所有列都是 root.name,root .time 等。我从 2016 年在这里看到了另一篇关于此的帖子,解决方案是使用临时表并像这样剥离根目录,
bq query --external_table_definition=foo::AVRO=gs://your_bucket/path/file.avro* --destination_table your_dataset.your_table "SELECT root.* FROM foo"
但 nodejs 库只有完成永久表的指令,而不是临时表。即使我想创建一个永久表,我也不能,因为由于“根”,它将所有列放在一行中,并且数据量超过了单行中允许的数量。如何将数据加载到 bigquery?
解决方案
您可以使用 bq js 库 [1] 创建一个外部表,您需要适当地设置选项对象 [2]
[1] https://github.com/googleapis/nodejs-bigquery/blob/master/samples/createTable.js
推荐阅读
- python - Linux - Pyinstaller 错误“无法执行脚本” - 将 Python 转换为 ELF 可执行文件
- javascript - 寻找更有效的方法来计算两个输入字段的值
- mysql - 即使没有对表进行任何更改,启动和提交 MySQL 事务是否有很大的成本?
- vue.js - 在字符串文字上使用带有切片的 v-if
- c++ - C++ 读取键盘事件
- asp.net-core - 如何让 IdentityServer 与 AddDbContextPool 一起使用
- github - 在 PR 上使用的 Github Actions 分支
- javascript - 将字符串化的变量列表转换为 Javascript 中的字符串化变量列表
- azure - 如何使用 az cli 列出存储 blob url?
- python - 如何连接元组并将其放入单个项目列表中?