매개변수화된 Dataflow SQL 쿼리 사용

이 페이지에서는 매개변수화된 Dataflow SQL 쿼리를 실행하는 방법을 설명합니다.

Dataflow SQL은 이름 지정 및 위치 쿼리 매개변수를 지원합니다. 다음 구문으로 쿼리 매개변수를 지정합니다.

  • @param_name과 같이 @ 문자 다음에 식별자가 붙은 이름이 지정된 매개변수
  • ? 문자가 있는 위치 매개변수

쿼리에서는 명명된 매개변수나 위치 매개변수를 사용할 수 있지만 둘 다 사용할 수는 없습니다.

매개변수화된 쿼리 실행

매개변수화된 쿼리를 실행하려면 쿼리 매개변수의 데이터 유형과 값을 정의합니다. 쿼리 매개변수의 유형과 값은 매개변수가 나타내는 데이터베이스 객체의 유형과 일치해야 합니다.

Google Cloud 콘솔 또는 Google Cloud CLI를 사용하여 쿼리 매개변수를 정의할 수 있습니다.

콘솔

쿼리 매개변수를 정의하려면 Dataflow SQL UI를 사용합니다.

  1. Dataflow SQL UI로 이동합니다.

    Dataflow SQL UI로 이동

  2. 쿼리 편집기에 Dataflow SQL 쿼리를 입력합니다.

    예를 들어 다음 쿼리는 지정된 가격 이상인 택시 탑승을 선택합니다.

    SELECT *
    FROM pubsub.topic.`pubsub-public-data`.`taxirides-realtime`
    WHERE
     ride_status = "dropoff"
     AND meter_reading >= @price_min
    
  3. Cloud Dataflow 작업 만들기를 클릭하여 작업 옵션 패널을 엽니다.

  4. 패널의 SQL 쿼리 매개변수 섹션에서 이름, 유형, 필드를 입력합니다. 이 예시에서 매개변수의 이름은 price_min이고 유형은 FLOAT64입니다.

    매개변수가 위치인 경우 이름 필드를 생략합니다.

  5. (선택사항) 쿼리에 더 많은 매개변수가 포함된 경우 매개변수 추가를 클릭합니다.

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를 사용합니다.

  1. Dataflow SQL UI로 이동합니다.

    Dataflow SQL UI로 이동

  2. 쿼리 편집기에 Dataflow SQL 쿼리를 입력합니다.

    예를 들어 다음 쿼리는 지정된 날짜 이후에 발생한 택시 탑승을 선택합니다.

    SELECT *
    FROM pubsub.topic.`pubsub-public-data`.`taxirides-realtime`
    WHERE
      event_timestamp >= TIMESTAMP (@date_min)
    
  3. Cloud Dataflow 작업 만들기를 클릭하여 작업 옵션 패널을 엽니다.

  4. SQL 쿼리 매개변수 섹션에서 매개변수 추가를 클릭합니다.

  5. 유형 필드에서 STRING을 선택합니다.

  6. 입력란에 타임스탬프를 입력합니다.

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 참조를 확인하세요.