Java APIを使用して既存のテーブルを使用して新しいタイムパーティションにデータを挿入する方法を理解しようとしています。私のようなものでCLI経由でこれを行うことができる午前:Java APIに挿入クエリを含むタイムパーティションを含める方法
クエリ--use_legacy_sql = falseを--allow_large_resultsが--destination_table --replace BQ 'analytics.base_client_qos $ 20170104'「SELECT *、CAST(SUBSTR(event_date_pst 、analytics.client_qos_tempからDTとしてDATE AS 0、10))」
私のような何か使ってJava APIを経由して、これを作成してみました:と
String projectId = "analytics-145623";
String datasetId = "analytics";
String destTableId = "'analytics.base_client_qos$20170104'";
String queryString = "'SELECT *, CAST(SUBSTR(event_date_pst, 0, 10) AS DATE) as dt from analytics.client_qos_temp'";
// first create the new time partition
TableReference tableRef = new TableReference()
.setProjectId(projectId)
.setDatasetId(datasetId)
.setTableId(destTableId);
Table table = new Table();
TimePartitioning timePartitioning = new TimePartitioning();
timePartitioning.setType("DAY");
table.setTimePartitioning(timePartitioning);
table.setTableReference(tableRef);
Bigquery.Tables.Insert request = client.tables().insert(projectId, datasetId, table);
Table response = request.execute();
// next run query to insert the data
JobConfigurationQuery queryConfig = new JobConfigurationQuery()
.setQuery(querySql)
.setDestinationTable(tableRef)
.setAllowLargeResults(true)
.setUseLegacySql(false)
.setPriority("BATCH")
.setWriteDisposition("WRITE_TRUNCATE");
Job job = new Job().setConfiguration(new JobConfiguration().setQuery(queryConfig));
client.jobs().insert(projectId, job).execute();
が、このエラーアウト:
{
"code" : 400,
"errors" : [ {
"domain" : "global",
"message" : "Invalid table ID \"'analytics.base_client_qos$20170104'\".",
"reason" : "invalid"
} ],
"message" : "Invalid table ID \"'analytics.base_client_qos$20170104'\"."
}
私はAPIドキュメントを掘りましたが、タイムパーティション情報を追加できる唯一の場所はTimePartitioningのテーブルにありますが、明らかに機能していないし、パーティション名でハングアップしています。
私は何が欠けていますか?私はこれを行う例を見つけようとしましたが、運はありません。誰もこれを行う方法を知っていますか?