이 페이지에서는 매개변수화된 Dataflow SQL 쿼리를 실행하는 방법을 설명합니다.
Dataflow SQL은 이름 지정 및 위치 쿼리 매개변수를 지원합니다. 다음 구문으로 쿼리 매개변수를 지정합니다.
@param_name
과 같이@
문자 다음에 식별자가 붙은 이름이 지정된 매개변수?
문자가 있는 위치 매개변수
쿼리에서는 명명된 매개변수나 위치 매개변수를 사용할 수 있지만 둘 다 사용할 수는 없습니다.
매개변수화된 쿼리 실행
매개변수화된 쿼리를 실행하려면 쿼리 매개변수의 데이터 유형과 값을 정의합니다. 쿼리 매개변수의 유형과 값은 매개변수가 나타내는 데이터베이스 객체의 유형과 일치해야 합니다.
Google Cloud 콘솔 또는 Google Cloud CLI를 사용하여 쿼리 매개변수를 정의할 수 있습니다.
콘솔
쿼리 매개변수를 정의하려면 Dataflow SQL UI를 사용합니다.
Dataflow SQL UI로 이동합니다.
쿼리 편집기에 Dataflow SQL 쿼리를 입력합니다.
예를 들어 다음 쿼리는 지정된 가격 이상인 택시 탑승을 선택합니다.
SELECT * FROM pubsub.topic.`pubsub-public-data`.`taxirides-realtime` WHERE ride_status = "dropoff" AND meter_reading >= @price_min
Cloud Dataflow 작업 만들기를 클릭하여 작업 옵션 패널을 엽니다.
패널의 SQL 쿼리 매개변수 섹션에서 이름, 유형, 값 필드를 입력합니다. 이 예시에서 매개변수의 이름은
price_min
이고 유형은FLOAT64
입니다.매개변수가 위치인 경우 이름 필드를 생략합니다.
(선택사항) 쿼리에 더 많은 매개변수가 포함된 경우 매개변수 추가를 클릭합니다.
Google Cloud 콘솔은 ARRAY
또는 STRUCT
매개변수를 지원하지 않습니다. ARRAY
또는 STRUCT
매개변수를 지정하려면 Google Cloud CLI를 사용합니다.
gcloud
쿼리 매개변수를 정의하려면 gcloud dataflow sql query
명령어와 --parameter
플래그를 사용합니다.
각 쿼리 매개변수에 대해 --parameter
플래그를 반복할 수 있습니다. 각 --parameter
플래그를 name:type:value
로 설정합니다.
다음 명령어는 택시 탑승의 Pub/Sub 스트림에서 매개변수화된 쿼리를 실행합니다.
gcloud dataflow sql query \ --job-name=job-name \ --region=region \ --bigquery-dataset=destination-dataset \ --bigquery-table=destination-table \ --parameter=status:STRING:dropoff \ --parameter=price_min:FLOAT64:5.5 \ 'SELECT * FROM pubsub.topic.`pubsub-public-data`.`taxirides-realtime` WHERE ride_status = @status AND meter_reading >= @price_min'
매개변수가 위치에 있으면 --parameter
플래그를 :type:value
로 설정합니다.
매개변수화된 쿼리의 배열 사용
쿼리 매개변수에 배열 유형을 사용하려면 유형을 ARRAY<data-type>
으로 설정합니다.
["pickup", "enroute", "dropoff"]
와 같이 대괄호로 묶이고 쉼표로 구분된 요소 목록으로 값을 구성합니다.
콘솔
Dataflow SQL UI는 Dataflow SQL 쿼리에서 ARRAY
매개변수를 지원하지 않습니다.
gcloud
배열 매개변수를 정의하려면 gcloud dataflow sql query
명령어의 --parameter
플래그를 name:ARRAY<data-type>:value
로 설정합니다.
다음 명령어는 택시 탑승의 Pub/Sub 스트림에서 명명된 배열 매개변수로 쿼리를 실행합니다.
gcloud dataflow sql query \ --job-name=job-name --region=region --bigquery-dataset=destination-dataset \ --bigquery-table=destination-table \ --parameter='status:ARRAY<STRING>:["pickup", "enroute", "dropoff"]' \ 'SELECT * FROM pubsub.topic.`pubsub-public-data`.`taxirides-realtime` WHERE ride_status IN UNNEST(@status)'
자세한 내용은 ARRAY
유형에 대한 Dataflow SQL 참조를 확인하세요.
매개변수화된 쿼리에서 타임스탬프 사용
쿼리 매개변수에 타임스탬프를 사용하려면 유형을 STRING
으로 설정하고 값을 표준 타임 스탬프 형식으로 구성합니다.
콘솔
타임스탬프 매개변수를 정의하려면 Dataflow SQL UI를 사용합니다.
Dataflow SQL UI로 이동합니다.
쿼리 편집기에 Dataflow SQL 쿼리를 입력합니다.
예를 들어 다음 쿼리는 지정된 날짜 이후에 발생한 택시 탑승을 선택합니다.
SELECT * FROM pubsub.topic.`pubsub-public-data`.`taxirides-realtime` WHERE event_timestamp >= TIMESTAMP (@date_min)
Cloud Dataflow 작업 만들기를 클릭하여 작업 옵션 패널을 엽니다.
SQL 쿼리 매개변수 섹션에서 매개변수 추가를 클릭합니다.
유형 필드에서
STRING
을 선택합니다.값 입력란에 타임스탬프를 입력합니다.
gcloud
타임스탬프 매개변수를 정의하려면 gcloud dataflow sql query
명령어의 --parameter
플래그를 name:STRING:value
로 설정합니다.
다음 명령어는 택시 탑승의 Pub/Sub 스트림에서 명명된 타임스탬프 매개변수로 쿼리를 실행합니다.
gcloud dataflow sql query \ --job-name=job-name \ --region=region \ --bigquery-dataset=destination-dataset \ --bigquery-table=destination-table \ --parameter='date_min:STRING:2020-01-01 00:00:00.000 UTC' \ 'SELECT * FROM pubsub.topic.`pubsub-public-data`.`taxirides-realtime` WHERE event_timestamp >= TIMESTAMP (@date_min)'
자세한 내용은 TIMESTAMP
유형에 대한 Dataflow SQL 참조를 확인하세요.
매개변수화된 쿼리의 구조체 사용
쿼리 매개변수에서 구조체를 사용하려면 유형을 STRUCT<field-name data-type, ...>
으로 설정합니다.
값을 쉼표로 구분된 키-값 쌍 목록으로 구성합니다.
예를 들어 STRUCT<date_min TIMESTAMP, status STRING>
은 이름이 date_min
이고 유형이 TIMESTAMP
인 필드와 이름이 status
이고 유형이 STRING
인 두 필드가 포함된 구조체를 정의합니다.
콘솔
Dataflow SQL UI는 Dataflow SQL 쿼리에서 STRUCT
매개변수를 지원하지 않습니다.
gcloud
배열 매개변수를 정의하려면 gcloud dataflow sql query
명령어의 --parameter
플래그를 name:STRUCT<field-name data-type, ...>:value
로 설정합니다.
다음 명령어는 택시 탑승의 Pub/Sub 스트림에서 명명된 구조체 매개변수로 쿼리를 실행합니다.
gcloud dataflow sql query \ --job-name=job-name \ --region=region \ --bigquery-dataset=destination-dataset \ --bigquery-table=destination-table \ --parameter='rides:STRUCT<riders_min INT64, status STRING>: {"riders_min": 2, "status": "dropoff"}' \ 'SELECT * FROM pubsub.topic.`pubsub-public-data`.`taxirides-realtime` WHERE passenger_count >= @rides.riders_min AND ride_status = @rides.status'
자세한 내용은 STRUCT
유형에 대한 Dataflow SQL 참조를 확인하세요.