0

gcloud python BigQueryライブラリを使用して非同期クエリを実行する必要があります。さらに、デフォルトlegacy sqlではなく、ベータstandard sqlを使用してクエリを実行する必要があります。

herehere、およびhereによると、ジョブのプロパティをFalseに設定するだけでいいはずです。ただし、これは依然として、レガシーSQLに対してクエリが処理されているためにエラーが発生します。 このプロパティを使用して、どのSQL標準でクエリを処理するかを指定するにはどうすればよいですか?以下Pythonのrun_async_query gcloud Legacy SQLの代わりにStandard SQLを使用するBigQuery

例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) 

この出力:

レガシSQLを使用したBigQueryコンソールでそれを実行した場合、あなたが取得したい同じエラーがある
False 
[{"reason": "invalidQuery", "message": "2.20 - 2.64: Bad number of arguments. Expected 1 arguments.", "location": "query"}] 

。 BigQueryコンソールにクエリを貼り付けて標準SQLを使用して実行すると、正常に実行されます。注:サンプルであるため、エラーの場所(2.20 - 2.64)は上記のクエリでは正確ではないかもしれません。私は個人的な情報を難読化しています。

+0

stdz_jobを作成した場合、なぜjob.state/job.errorsをチェックしていますか?仕事の目的は何ですか? –

+0

Good eye Mosha、私はこのサンプルを作成するために自分のコードを修正しました。元々は、複数のstdzジョブインスタンスをループしてリストに保持し、後で状態を確認するために再びループしています。このサンプルでは、​​単一のジョブシナリオを反映するようにコードを編集しました。 – KevinTydlacka

+0

他のプロパティ(destination、allow_large_resultsなど)もこのメソッドで正しく設定されていますか?私はクライアントコードを覗き込んだが、これはちょうどうまくいくはずだ。 'useLegacySql'パラメータのサポートが[1週間ほど前に追加されました]ようです(https://github.com/GoogleCloudPlatform/gcloud-python/commit/21ae0c97566c9e5e8f485cb7536fcd6e7efc44f3):クライアントの最新バージョンを持っていますか? –

答えて

1

use_legacy_sql propertyはバージョン0.17.0では存在しなかったので、現在のマスターブランチをチェックアウトする必要がありました。しかし、リリース0.18.0として存在しますので、pipを使ってgcloud-pythonをアップグレードした後には、うまくいくはずです。

関連する問題