以编程方式在 BigQuery 的数据集中创建表
Posted
技术标签:
【中文标题】以编程方式在 BigQuery 的数据集中创建表【英文标题】:Creating a table within a dataset in BigQuery programmatically 【发布时间】:2017-08-05 20:14:52 【问题描述】:是否可以使用 Java 中的 API 在 BigQuery 的数据集中创建表?我知道这是可能的
bq mk --schema <fileName> -t <project>:<dataset>.<table>
但我找不到以编程方式执行此操作的方法。
【问题讨论】:
【参考方案1】:我没有亲自使用过 Java BigQuery 库1,但看起来您应该调用 BigQuery.create(TableInfo, TableOptions[]
。该文档有这个示例代码 - 当然假设您已经有一个 BigQuery
接口实现的实例:
String datasetName = "my_dataset_name";
String tableName = "my_table_name";
String fieldName = "string_field";
TableId tableId = TableId.of(datasetName, tableName);
// Table field definition
Field field = Field.of(fieldName, Field.Type.string());
// Table schema definition
Schema schema = Schema.of(field);
TableDefinition tableDefinition = StandardTableDefinition.of(schema);
TableInfo tableInfo = TableInfo.newBuilder(tableId, tableDefinition).build();
Table table = bigquery.create(tableInfo);
显然,对于 real 表,您的架构构造可能会涉及更多,但这应该可以帮助您入门。我看不到从文件中加载模式的任何方式,但是如果您的模式文件以简单的方式(例如 JSON)是机器可读的,那么您可能很容易编写自己的解析器。 (如果您愿意,也可以将其贡献给项目......)
1我是 C# BigQuery 库的主要作者,所以我知道要寻找什么。
【讨论】:
感谢您的回答。好吧,我实际上是在寻找一种直接从模式创建表的方法,而不是加载它并迭代。这是一个有用的建议,再次感谢。 @EduardoSanchez-Ros:当您说“直接来自架构”时,您的意思是来自文件?如果是这样,这是一个有点不同的问题,但我不认为它特别难做到。 (就我个人而言,我通常只是将模式硬编码在代码中,而不是将其放在单独的文件中,但这是另一回事。) 是的,我就是这个意思。正如你所说,我可以编写自己的解析器并从模式文件中创建表。我会很高兴在 API 中拥有这种能力:)。谢谢@Jon Skeet @EduardoSanchez-Ros:我建议您在 repo 上提交功能请求:github.com/GoogleCloudPlatform/google-cloud-java 完成github.com/GoogleCloudPlatform/google-cloud-java/issues/2308以上是关于以编程方式在 BigQuery 的数据集中创建表的主要内容,如果未能解决你的问题,请参考以下文章
Google BigQuery:授予服务帐户权限以仅在某些特定数据集中创建作业
Google Bigquery:如何从 Web UI 查询界面以编程方式创建表(保存结果)?