gcloud python BigQuery 라이브러리를 사용하여 비동기 쿼리를 실행해야합니다. 또한 기본 legacy sql 대신 베타 standard sql을 사용하여 쿼리를 실행해야합니다.
here, here 및 here에 따르면 속성을 False
으로 설정해야한다고 생각합니다. 그러나이 여전히 레거시 SQL에 대해 처리되는 쿼리로 인해 오류가 발생합니다. 이 속성을 사용하여 쿼리를 처리 할 SQL 표준을 나타내는 데 어떻게 성공적으로 사용할 수 있습니까? 아래Python에서 run_async_query gcloud 레거시 SQL 대신 표준 SQL을 사용하는 BigQuery
예 파이썬 코드 :
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)가 위의 쿼리에서 정확하지 않을 수 있으며 일부 개인 정보가 난독 화되었습니다.
stdz_job을 작성한 경우 job.state/job.errors를 점검하는 이유는 무엇입니까? 여기에 직업 개체가 무엇입니까? –
Good eye Mosha, 필자는이 샘플을 만들기 위해 코드를 수정했습니다. 원래는 여러 개의 stdz 작업 인스턴스를 반복하여 목록에 보관하고 나중에 상태를 확인하기 위해 모두 다시 반복합니다. 이 샘플에서 단일 작업 시나리오를 반영하도록 코드를 편집했습니다. – KevinTydlacka
이 속성을 통해 다른 속성 (예 : 대상, allow_large_results)도 제대로 설정되어 있습니까? 나는 클라이언트 코드를 들여다 보았다. 'useLegacySql' 매개 변수에 대한 지원이 [일주일 전에 추가되었습니다] (https://github.com/GoogleCloudPlatform/gcloud-python/commit/21ae0c97566c9e5e8f485cb7536fcd6e7efc44f3) 것처럼 보입니다 : 가장 최신 버전의 클라이언트를 보유하고 있습니까 ? –