0

gcloud python BigQuery ライブラリを使用して非同期クエリを実行する必要があります。さらに、デフォルトのレガシー sqlの代わりにベータ標準 sqlを使用してクエリを実行する必要があります。ドキュメントherehere、およびhereによると、ジョブのプロパティを に設定するだけでよいと思います。ただし、クエリがレガシー SQL に対して処理されるため、これでもエラーが発生します。 このプロパティを使用して、クエリを処理する SQL 標準を正しく示すにはどうすればよいですか?

use_legacy_sqlFalse

以下の Python コードの例:

stdz_table = stdz_dataset.table('standardized_table1')
job_name = 'asyncjob-test'
query = """
    SELECT TIMESTAMP('2016-03-30 10:32:15', 'America/Chicago') AS special_date 
    FROM my_dataset.my_table_20160331;
    """
stdz_job = bq_client.run_async_query(job_name,query)
stdz_job.use_legacy_sql = False
stdz_job.allow_large_results = True
stdz_job.create_disposition = 'CREATE_IF_NEEDED'
stdz_job.destination = stdz_table
stdz_job.write_disposition = 'WRITE_TRUNCATE'
stdz_job.begin()

# wait for job to finish
while True:
    stdz_job.reload()
    if stdz_job.state == 'DONE':
        # print use_legacy_sql value, and any errors (will be None if job executed successfully)
        print stdz_job.use_legacy_sql
        print json.dumps(stdz_job.errors)
        break
    time.sleep(1)

これは以下を出力します:

False
[{"reason": "invalidQuery", "message": "2.20 - 2.64: Bad number of arguments. Expected 1 arguments.", "location": "query"}]

これは、レガシー SQL を使用して BigQuery コンソールで実行した場合と同じエラーです。クエリをコピーして BigQuery コンソールに貼り付け、標準 SQL を使用して実行すると、正常に実行されます。注: エラーの場所 (2.20 - 2.64) は、サンプルであり、個人情報の一部を難読化しているため、上記のクエリに対して正確ではない可能性があります。

4

1 に答える 1

1

use_legacy_sql プロパティはバージョン 0.17.0の時点では存在しなかったため、現在の master ブランチをチェックアウトする必要がありました。ただし、現在はリリース 0.18.0 として存在しているため、pip を介して gcloud-python をアップグレードした後は問題ありません。

于 2016-08-05T23:08:24.857 に答える