BQ 테이블 대상에 대해 Linux 명령 줄에서 SQL을 실행하려고합니다. 이 SQL 스크립트는 여러 날짜, 클라이언트 및 BQ 테이블 대상에 사용되므로 내 BQ API 명령 줄 호출 (플래그 - 매개 변수)에서 매개 변수를 사용해야합니다. 이제이 링크를 따라 매개 변수가있는 쿼리에 대해 알아 보았습니다 : https://cloud.google.com/bigquery/docs/parameterized-queries,하지만 테이블 이름을 선언하는 데 도움이됩니다.Google BQ : 매개 변수 변수가 BQ 테이블 대상 인 매개 변수가있는 쿼리 실행
매개 변수의 변수는 다음과 같은 표현#standardSQL
SELECT *
FROM (SELECT *
FROM @variable_table
WHERE CAST(_PARTITIONTIME AS DATE) = @variable_date) as final
WHERE final.Advertiser IN UNNEST(@variable_clients)
:
- variable_table : 내가 원하는 BQ 테이블 대상 전화를 는 Advertiser_Date_Check.sql라는 내 SQL 스크립트, 다음과 같은 것이있다
- variable_date : BQ 테이블에서 가져 오려는 날짜
- variable_clients : 내가 속한 특정 클라이언트의 배열 목록 NT 지금
(I가 참조 된 날로부터 인) 데이터에서 끌어의 BQ 데이터에 대한 내 명령 줄 (LINUX)는 @variable_date 및 @variable_clients의 다음
TABLE_NAME=table_name_example
BQ_TABLE=$(echo '`project_id.dataset_id.'$TABLE_NAME'`')
TODAY=$(date +%F)
/bin/bq query --use_legacy_sql=false \
--parameter='variable_table::'$BQ_TABLE'' \
--parameter=variable_date::"$TODAY" \
--parameter='variable_clients:ARRAY<STRING>:["Client_1","Client_2","Client_3"]' \
"`cat /path/to/script/Advertiser_Date_Check.sql`"
매개 변수입니다 그것이 단지 그들이었을 때 과거에는 잘 돌아갔다. 그러나 루프의 여러 테이블에서이 정확한 SQL 명령을 실행하고자하므로 variable_table이라는 매개 변수를 만들었습니다.
Error in query string: Error processing job ... : Syntax error: Unexpected "@" at [4:12]
: 나는 명령 줄에서이 작업을 실행하려고 할 때마다
`project_id.dataset_id.table_name`
, 나는 일반적으로 다음과 같은 오류가 발생합니다 : 테이블 이름 규칙은 형식으로 할 필요가 있도록 매개 변수화 된 쿼리, 표준 SQL 형식으로해야
매개 변수 @variable_table을 참조하고 있으므로 테이블 이름을 참조하는 것이 힘들다. 과거 시도에서, 심지어 오류가 있음 :
project_id.dataset_id.table_name: command not found
하지만이 때문에 테이블 대상 이름의 가난한 참고로 대부분이었다. 첫 번째 오류가 가장 흔한 오류입니다.
전반적으로,이 문제에 대한 내 질문은 : 나는에서 매개 변수가있는 쿼리에 대한 명령 줄에서 매개 변수로 BQ 표를 참조하려면 어떻게
- FROM 절 (예 : 내가 @variable_table으로 수행하려고 할 것과)? 심지어 가능할까요?
- 내가 현재하고있는 방법 외에 명령 줄에서 여러 BQ 테이블에 대한 쿼리를 실행하는 다른 방법을 알고 있습니까?
희망이 모든 것이 의미가 있으며 도움을 주셔서 감사합니다.
나는이 경우에 당신을 위해 작동 할 수 있습니다 어떻게 생각Parameters cannot be used as substitutes for identifiers, column names, table names, or other parts of the query.
는하지만, 대신 쿼리 매개 변수의 (일반 쉘 변수로 테이블 이름의 주입을 수행 할 수 있습니다 : 당신이 링크 된 문서에서
연결된 설명서에서 "매개 변수는 식별자, 열 이름, 테이블 이름 또는 쿼리의 다른 부분을 대신 사용할 수 없습니다." –
오 ~ 이런. 나는 그 부분을 놓친 것 같습니다. 꽤 긴 하루였습니다. 답장을 보내 주셔서 감사합니다. –
나는 당신을 위해 무엇이 효과가 있을지 생각하지만, 쿼리 매개 변수 대신에 정규 쉘 변수로 테이블 이름을 주입하는 것으로 생각한다. 당신은 SQL 인젝션을 피하기 위해 당신이 그 내용을 신뢰하는지, 아니면 당신이 문자열을 스스로 만들고 있는지 확인하고 싶을 것이다. –