【发布时间】:2017-12-15 06:37:10
【问题描述】:
我在运行时获取 BigQuery 表名称,并将该名称传递给管道末尾的 BigQueryIO.write 操作以写入该表。
我为它写的代码是:
rows.apply("write to BigQuery", BigQueryIO
.writeTableRows()
.withSchema(schema)
.to("projectID:DatasetID."+tablename)
.withWriteDisposition(WriteDisposition.WRITE_TRUNCATE)
.withCreateDisposition(CreateDisposition.CREATE_IF_NEEDED));
使用这种语法我总是会出错,
Exception in thread "main" java.lang.IllegalArgumentException: Table reference is not in [project_id]:[dataset_id].[table_id] format
当我事先不知道应该将数据放入哪个表时,如何以正确的格式传递表名?有什么建议吗?
谢谢
【问题讨论】:
-
可以有多少个表将数据写入 bigquery?
-
“tableName”字段或变量来自哪里?它是如何定义的?
-
另外:此错误消息似乎不完整;我相信它应该包括表格规范的实际值。如果不知道传递给 .to() 的确切值,很难帮助您解决此错误 - 错误消息只是说您传递给 .to() 的值格式不正确;它与您在运行时传递它的事实无关。
-
也许您会发现另一件有用的事情:如果您要写入的表是由数据本身决定的,请参阅此答案stackoverflow.com/a/43505535/278042。
-
@BenChambers 我正在做的是,我从 BigQuery 表中的一个字段中获取“tableName”并将其存储在一个字符串变量中......我最终将其传递给BigQueryIO.write() 操作。
标签: google-bigquery google-cloud-dataflow apache-beam