0

gcloud python BigQuery 라이브러리를 사용하여 비동기 쿼리를 실행해야합니다. 또한 기본 legacy sql 대신 베타 standard sql을 사용하여 쿼리를 실행해야합니다.

here, herehere에 따르면 속성을 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)가 위의 쿼리에서 정확하지 않을 수 있으며 일부 개인 정보가 난독 화되었습니다.

+0

stdz_job을 작성한 경우 job.state/job.errors를 점검하는 이유는 무엇입니까? 여기에 직업 개체가 무엇입니까? –

+0

Good eye Mosha, 필자는이 샘플을 만들기 위해 코드를 수정했습니다. 원래는 여러 개의 stdz 작업 인스턴스를 반복하여 목록에 보관하고 나중에 상태를 확인하기 위해 모두 다시 반복합니다. 이 샘플에서 단일 작업 시나리오를 반영하도록 코드를 편집했습니다. – KevinTydlacka

+0

이 속성을 통해 다른 속성 (예 : 대상, allow_large_results)도 제대로 설정되어 있습니까? 나는 클라이언트 코드를 들여다 보았다. 'useLegacySql' 매개 변수에 대한 지원이 [일주일 전에 추가되었습니다] (https://github.com/GoogleCloudPlatform/gcloud-python/commit/21ae0c97566c9e5e8f485cb7536fcd6e7efc44f3) 것처럼 보입니다 : 가장 최신 버전의 클라이언트를 보유하고 있습니까 ? –

답변

1

use_legacy_sql property은 버전 0.17.0부터 존재하지 않으므로 현재 마스터 분기를 체크 아웃해야합니다. 그러나 현재 릴리스 0.18.0으로 존재하기 때문에 gcloud-python을 pip로 업그레이드 한 후에는 잘 수행해야합니다.