표준 SQL 사용

이 항목에서는 BigQuery 데이터를 쿼리할 때 표준 SQL을 사용하도록 설정하는 방법을 설명합니다.

BigQuery 웹 UI의 기초는 웹 UI 사용 퀵스타트를 참조하세요.

bq 명령줄 도구의 기초는 bq 명령줄 도구 사용 퀵스타트를 참조하세요.

useLegacySql 옵션 설정

쿼리에서 표준 SQL을 사용 설정하려면 다음 안내를 따르세요.

웹 UI

  1. BigQuery 웹 UI를 엽니다.
  2. 쿼리 작성을 클릭합니다.
  3. 옵션 표시를 클릭합니다.
  4. 이전 SQL 사용 체크박스를 선택 해제합니다.

명령줄

명령줄 문에 --use_legacy_sql=false 플래그를 추가합니다.

bq query --use_legacy_sql=false 'SELECT word FROM `bigquery-public-data.samples.shakespeare`'

C#

이 샘플을 시도해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 C# 설정 안내를 따르세요. 자세한 내용은 BigQuery C# API 참조 문서를 참조하세요.

쿼리를 실행할 때 기본적으로 표준 SQL이 사용됩니다.


using Google.Cloud.BigQuery.V2;
using System;

public class BigQueryQuery
{
    public void Query(
        string projectId = "your-project-id"
    )
    {
        BigQueryClient client = BigQueryClient.Create(projectId);
        string query = @"
            SELECT name FROM `bigquery-public-data.usa_names.usa_1910_2013`
            WHERE state = 'TX'
            LIMIT 100";
        BigQueryJob job = client.CreateQueryJob(
            sql: query,
            parameters: null,
            options: new QueryOptions { UseQueryCache = false });
        // Wait for the job to complete.
        job.PollUntilCompleted();
        // Display the results
        foreach (BigQueryRow row in client.GetQueryResults(job.Reference))
        {
            Console.WriteLine($"{row["name"]}");
        }
    }
}

Legacy SQL 사용

쿼리를 실행할 때 legacy SQL을 사용하려면 UseLegacySql 매개변수를 true로 설정합니다.


using Google.Cloud.BigQuery.V2;
using System;

public class BigQueryQueryLegacy
{
    public void QueryLegacy(
        string projectId = "your-project-id"
    )
    {
        BigQueryClient client = BigQueryClient.Create(projectId);
        string query = @"
            SELECT name FROM [bigquery-public-data:usa_names.usa_1910_2013]
            WHERE state = 'TX'
            LIMIT 100";
        BigQueryJob job = client.CreateQueryJob(
            sql: query,
            parameters: null,
            options: new QueryOptions { UseLegacySql = true });
        // Wait for the job to complete.
        job.PollUntilCompleted();
        // Display the results
        foreach (BigQueryRow row in client.GetQueryResults(job.Reference))
        {
            Console.WriteLine($"{row["name"]}");
        }
    }
}

Go

이 샘플을 시도하기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Go 설정 안내를 따르세요. 자세한 내용은 BigQuery Go API 참조 문서를 참조하세요.

기본적으로 Go 클라이언트 라이브러리는 표준 SQL을 사용합니다.


q := client.Query(
	"SELECT name FROM `bigquery-public-data.usa_names.usa_1910_2013` " +
		"WHERE state = \"TX\" " +
		"LIMIT 100")
// Location must match that of the dataset(s) referenced in the query.
q.Location = "US"
job, err := q.Run(ctx)
if err != nil {
	return err
}
status, err := job.Wait(ctx)
if err != nil {
	return err
}
if err := status.Err(); err != nil {
	return err
}
it, err := job.Read(ctx)
for {
	var row []bigquery.Value
	err := it.Next(&row)
	if err == iterator.Done {
		break
	}
	if err != nil {
		return err
	}
	fmt.Println(row)
}

Legacy SQL 사용

이전 쿼리로 전환하려면 쿼리 구성에 있는 UseLegacySQL 속성을 사용합니다.

q := client.Query(sqlString)
q.UseLegacySQL = true

job, err := q.Run(ctx)
if err != nil {
	return err
}
status, err := job.Wait(ctx)
if err != nil {
	return err
}
if err := status.Err(); err != nil {
	return err
}
it, err := job.Read(ctx)
for {
	var row []bigquery.Value
	err := it.Next(&row)
	if err == iterator.Done {
		break
	}
	if err != nil {
		return err
	}
	fmt.Println(row)
}

자바

이 샘플을 시도하기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 자바 설정 안내를 따르세요. 자세한 내용은 BigQuery 자바 API 참조 문서를 참조하세요.

기본적으로 자바 클라이언트 라이브러리는 표준 SQL을 사용합니다.

// BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
String query = "SELECT corpus FROM `bigquery-public-data.samples.shakespeare` GROUP BY corpus;";
QueryJobConfiguration queryConfig = QueryJobConfiguration.newBuilder(query).build();

// Print the results.
for (FieldValueList row : bigquery.query(queryConfig).iterateAll()) {
  for (FieldValue val : row) {
    System.out.printf("%s,", val.toString());
  }
  System.out.printf("\n");
}

Legacy SQL 사용

쿼리 작업에서 legacy SQL 구문을 사용하려면 useLegacySql 매개변수를 true로 설정합니다.

// BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
String query = "SELECT corpus FROM [bigquery-public-data:samples.shakespeare] GROUP BY corpus;";
QueryJobConfiguration queryConfig =
    // To use legacy SQL syntax, set useLegacySql to true.
    QueryJobConfiguration.newBuilder(query).setUseLegacySql(true).build();

// Print the results.
for (FieldValueList row : bigquery.query(queryConfig).iterateAll()) {
  for (FieldValue val : row) {
    System.out.printf("%s,", val.toString());
  }
  System.out.printf("\n");
}

Node.js

이 샘플을 시도해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Node.js 설정 안내를 따르세요. 자세한 내용은 BigQuery Node.js API 참조 문서를 참조하세요.

기본적으로 Node.js 클라이언트 라이브러리는 표준 SQL을 사용합니다.

// Import the Google Cloud client library using default credentials
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();
async function query() {
  // Queries the U.S. given names dataset for the state of Texas.

  const query = `SELECT name
    FROM \`bigquery-public-data.usa_names.usa_1910_2013\`
    WHERE state = 'TX'
    LIMIT 100`;

  // For all options, see https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs/query
  const options = {
    query: query,
    // Location must match that of the dataset(s) referenced in the query.
    location: 'US',
  };

  // Run the query as a job
  const [job] = await bigquery.createQueryJob(options);
  console.log(`Job ${job.id} started.`);

  // Wait for the query to finish
  const [rows] = await job.getQueryResults();

  // Print the results
  console.log('Rows:');
  rows.forEach(row => console.log(row));
}

Legacy SQL 사용

쿼리 작업에서 이전 SQL 구문을 사용하려면 useLegacySql 매개변수를 true로 설정합니다.

PHP

이 샘플을 시도하기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 PHP 설정 안내를 따르세요. 자세한 내용은 BigQuery PHP API 참조 문서를 참조하세요.

기본적으로 PHP 클라이언트 라이브러리는 표준 SQL을 사용합니다.

use Google\Cloud\BigQuery\BigQueryClient;
use Google\Cloud\Core\ExponentialBackoff;

/** Uncomment and populate these variables in your code */
// $projectId = 'The Google project ID';
// $query = 'SELECT id, view_count FROM `bigquery-public-data.stackoverflow.posts_questions`';

$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);
$jobConfig = $bigQuery->query($query);
$job = $bigQuery->startQuery($jobConfig);

$backoff = new ExponentialBackoff(10);
$backoff->execute(function () use ($job) {
    print('Waiting for job to complete' . PHP_EOL);
    $job->reload();
    if (!$job->isComplete()) {
        throw new Exception('Job has not yet completed', 500);
    }
});
$queryResults = $job->queryResults();

$i = 0;
foreach ($queryResults as $row) {
    printf('--- Row %s ---' . PHP_EOL, ++$i);
    foreach ($row as $column => $value) {
        printf('%s: %s' . PHP_EOL, $column, json_encode($value));
    }
}
printf('Found %s row(s)' . PHP_EOL, $i);

Legacy SQL 사용

쿼리 작업에서 legacy SQL 구문을 사용하려면 useLegacySql 매개변수를 true로 설정합니다.

Python

이 샘플을 시도하기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Python 설정 안내를 따르세요. 자세한 내용은 BigQuery Python API 참조 문서를 참조하세요.

기본적으로 Python 클라이언트 라이브러리는 표준 SQL을 사용합니다.

# from google.cloud import bigquery
# client = bigquery.Client()

query = (
    "SELECT name FROM `bigquery-public-data.usa_names.usa_1910_2013` "
    'WHERE state = "TX" '
    "LIMIT 100"
)
query_job = client.query(
    query,
    # Location must match that of the dataset(s) referenced in the query.
    location="US",
)  # API request - starts the query

for row in query_job:  # API request - fetches results
    # Row values can be accessed by field name or index
    assert row[0] == row.name == row["name"]
    print(row)

Legacy SQL 사용

쿼리 작업에서 legacy SQL 구문을 사용하려면 use_legacy_sql 매개변수를 True로 설정합니다.

# from google.cloud import bigquery
# client = bigquery.Client()

query = (
    "SELECT name FROM [bigquery-public-data:usa_names.usa_1910_2013] "
    'WHERE state = "TX" '
    "LIMIT 100"
)

# Set use_legacy_sql to True to use legacy SQL syntax.
job_config = bigquery.QueryJobConfig()
job_config.use_legacy_sql = True

query_job = client.query(
    query,
    # Location must match that of the dataset(s) referenced in the query.
    location="US",
    job_config=job_config,
)  # API request - starts the query

# Print the results.
for row in query_job:  # API request - fetches results
    print(row)

Ruby

이 샘플을 시도하기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Ruby 설정 안내를 따르세요. 자세한 내용은 BigQuery Ruby API 참조 문서를 참조하세요.

기본적으로 Ruby 클라이언트 라이브러리는 표준 SQL을 사용합니다.

require "google/cloud/bigquery"

def query
  bigquery = Google::Cloud::Bigquery.new
  sql = "SELECT name FROM `bigquery-public-data.usa_names.usa_1910_2013` " +
        "WHERE state = 'TX' " +
        "LIMIT 100"

  # Location must match that of the dataset(s) referenced in the query.
  results = bigquery.query sql do |config|
    config.location = "US"
  end

  results.each do |row|
    puts row.inspect
  end
end

쿼리 프리픽스 설정

웹 UI, REST API에서 또는 클라이언트 라이브러리를 사용할 때 쿼리에 접두사를 추가하여 SQL 변형을 이전 SQL 또는 표준 SQL로 설정할 수 있습니다.

접두사 설명
#legacySQL 이전 SQL을 사용하여 쿼리를 실행합니다.
#standardSQL 표준 SQL을 사용하여 쿼리를 실행합니다.

예를 들어 다음 쿼리를 복사해서 웹 UI에 붙여넣으면 BigQuery는 표준 SQL을 사용하여 쿼리를 실행하고 기본 이전 SQL 사용 옵션 설정을 무시합니다.

#standardSQL
SELECT
  weight_pounds, state, year, gestation_weeks
FROM
  `bigquery-public-data.samples.natality`
ORDER BY weight_pounds DESC
LIMIT 10;

useLegacySql 옵션을 명시적으로 설정하는 경우 접두사와 일관적이어야 합니다. 예를 들어 웹 UI에서 Legacy SQL 사용 옵션을 선택 해제하면 #legacySQL 프리픽스를 사용할 수 없습니다.

쿼리 접두사 #legacySQL#standardSQL:

  • 대소문자를 구분하지 않습니다.
  • 쿼리보다 선행해야 합니다.
  • 줄바꿈 문자로 쿼리와 구분해야 합니다.

일부 제3자 도구는 예를 들어 쿼리를 BigQuery로 전송하기 전에 쿼리 텍스트를 수정하는 경우 이 접두사를 지원하지 않을 수 있습니다.

표준 SQL을 명령줄 도구의 기본값으로 설정

명령줄 도구의 구성 파일 .bigqueryrc를 편집하여 표준 SQL을 명령줄 도구 및 대화식 셸의 기본 구문으로 설정할 수 있습니다.

.bigqueryrc에 대한 자세한 내용은 명령어별 플래그의 기본값 설정을 참조하세요.

.bigqueryrc에서 --use_legacy_sql=false를 설정하려면 다음 안내를 따르세요.

  1. 텍스트 편집기에서 .bigqueryrc를 엽니다. 기본적으로 .bigqueryrc는 사용자 디렉토리에 있습니다(예: $HOME/.bigqueryrc).

  2. 파일에 다음 텍스트를 추가합니다. 이 예는 표준 SQL을 쿼리와 mk 명령어(뷰를 만들 때 사용됨)의 기본 구문으로 설정합니다. query 또는 mk 명령어 플래그의 기본값을 이미 구성한 경우 [query] 또는 [mk]를 다시 추가할 필요가 없습니다.

    [query]
    --use_legacy_sql=false
    
    [mk]
    --use_legacy_sql=false
    
  3. 저장하고 파일을 닫습니다.

  4. 대화식 셸을 사용하는 경우 변경 사항을 적용하려면 종료한 후 다시 시작해야 합니다.

사용할 수 있는 명령줄 플래그에 대한 자세한 내용은 bq 명령줄 도구 참조를 확인하세요.

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

도움이 필요하시나요? 지원 페이지를 방문하세요.