bq ๋ช…๋ น์ค„ ๋„๊ตฌ ์‚ดํŽด๋ณด๊ธฐ

bq ๋ช…๋ น์ค„ ๋„๊ตฌ๋Š” BigQuery์šฉ Python ๊ธฐ๋ฐ˜ ๋ช…๋ น์ค„ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์ด ํŽ˜์ด์ง€์—๋Š” bq ๋ช…๋ น์ค„ ๋„๊ตฌ ์‚ฌ์šฉ์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  bq ๋ช…๋ น์–ด ๋ฐ ํ”Œ๋ž˜๊ทธ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ bq ๋ช…๋ น์ค„ ๋„๊ตฌ ์ฐธ์กฐ๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

์‹œ์ž‘ํ•˜๊ธฐ ์ „์—

bq ๋ช…๋ น์ค„ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋จผ์ € Google Cloud ์ฝ˜์†”์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๊ฑฐ๋‚˜ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  4. BigQuery๋Š” ์ƒˆ ํ”„๋กœ์ ํŠธ์—์„œ ์ž๋™์œผ๋กœ ์‚ฌ์šฉ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด ํ”„๋กœ์ ํŠธ์—์„œ BigQuery๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด ๋‹ค์Œ์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  5. Enable the BigQuery API.

    Enable the API

  6. (์„ ํƒ์‚ฌํ•ญ) ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ๊ฒฐ์ œ๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ์ œ๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ ์‹ ์šฉ์นด๋“œ๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์ด ๋ฌธ์„œ์˜ ๋‹จ๊ณ„๊ฐ€ ๊ณ„์† ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. BigQuery์—์„œ๋Š” ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ƒŒ๋“œ๋ฐ•์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ BigQuery ์ƒŒ๋“œ๋ฐ•์Šค ์‚ฌ์šฉ ์„ค์ •์„ ์ฐธ์กฐํ•˜์„ธ์š”.
  7. Cloud Shell์—์„œ bq ๋ช…๋ น์–ด ์ž…๋ ฅ

    Google Cloud ์ฝ˜์†” ๋˜๋Š” Google Cloud CLI์—์„œ Cloud Shell์— bq ๋ช…๋ น์ค„ ๋„๊ตฌ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • Google Cloud ์ฝ˜์†”์—์„œ bq ๋ช…๋ น์ค„ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด Cloud Shell์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

      Cloud Shell ํ™œ์„ฑํ™”

    • gcloud CLI์—์„œ bq ๋ช…๋ น์ค„ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด gcloud CLI ์„ค์น˜ ๋ฐ ๊ตฌ์„ฑ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    ํ”Œ๋ž˜๊ทธ ๋ฐ ์ธ์ˆ˜ ์œ„์น˜ ์ง€์ •

    bq ๋ช…๋ น์ค„ ๋„๊ตฌ๋Š” ๋‘ ๊ฐ€์ง€ ์ข…๋ฅ˜์˜ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

    • ์ „์—ญ ํ”Œ๋ž˜๊ทธ๋Š” ๋ชจ๋“  ๋ช…๋ น์–ด์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋ช…๋ น์–ด๋ณ„ ํ”Œ๋ž˜๊ทธ๋Š” ํŠน์ • ๋ช…๋ น์–ด์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

    ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ „์—ญ ํ”Œ๋ž˜๊ทธ์™€ ๋ช…๋ น์–ด ๊ด€๋ จ ํ”Œ๋ž˜๊ทธ ๋ชฉ๋ก์€ bq ๋ช…๋ น์ค„ ๋„๊ตฌ ์ฐธ์กฐ ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

    ์ „์—ญ ํ”Œ๋ž˜๊ทธ๋ฅผ bq ๋ช…๋ น์–ด ์•ž์— ๋ฐฐ์น˜ํ•œ ํ›„ ๋ช…๋ น์–ด๋ณ„ ํ”Œ๋ž˜๊ทธ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์ „์—ญ ํ”Œ๋ž˜๊ทธ ๋˜๋Š” ๋ช…๋ น์–ด๋ณ„ ํ”Œ๋ž˜๊ทธ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    bq --location=us mk --reservation --project_id=project reservation_name
    

    ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ช…๋ น์–ด ์ธ์ˆ˜๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • --FLAG ARGUMENT(์ด์ „ ์˜ˆ์‹œ์™€ ๊ฐ™์ด)
    • --FLAG=ARGUMENT
    • --FLAG='ARGUMENT'
    • --FLAG="ARGUMENT"
    • --FLAG 'ARGUMENT'
    • --FLAG "ARGUMENT"

    ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • FLAG: ์ „์—ญ ํ”Œ๋ž˜๊ทธ ๋˜๋Š” ๋ช…๋ น์–ด๋ณ„ ํ”Œ๋ž˜๊ทธ
    • ARGUMENT: ํ”Œ๋ž˜๊ทธ ์ธ์ˆ˜

    ์ผ๋ถ€ ๋ช…๋ น์–ด์—์„œ๋Š” ์ธ์ˆ˜๋ฅผ ์ž‘์€ ๋”ฐ์˜ดํ‘œ๋‚˜ ํฐ ๋”ฐ์˜ดํ‘œ๋กœ ๋ฌถ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ธ์ˆ˜์— ๊ณต๋ฐฑ, ์‰ผํ‘œ ๋˜๋Š” ๊ธฐํƒ€ ํŠน์ˆ˜ ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ฃผ๋กœ ์—ฌ๊ธฐ์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    bq query --nouse_legacy_sql \
    'SELECT
       COUNT(*)
     FROM
       `bigquery-public-data`.samples.shakespeare'

    ๋ถ€์šธ ๊ฐ’์ด ์žˆ๋Š” ํ”Œ๋ž˜๊ทธ๋Š” ์ธ์ˆ˜ ์—†์ด ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. true ๋˜๋Š” false๋ฅผ ์ง€์ •ํ•  ๊ฒฝ์šฐ FLAG=ARGUMENT ํ˜•์‹์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ ๋ช…๋ น์–ด๋Š” ํ”Œ๋ž˜๊ทธ ์•ž์— no๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๋ถ€์šธ ํ”Œ๋ž˜๊ทธ --use_legacy_sql์„ false๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

    bq query --nouse_legacy_sql \
    'SELECT
       COUNT(*)
     FROM
       `bigquery-public-data`.samples.shakespeare'

    ๋˜๋Š” ํ”Œ๋ž˜๊ทธ์˜ ์ธ์ˆ˜๋กœ false๋ฅผ ์ง€์ •ํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

    bq query --use_legacy_sql=false \
    'SELECT
       COUNT(*)
     FROM
       `bigquery-public-data`.samples.shakespeare'

    bq ๋ช…๋ น์ค„ ๋„๊ตฌ์—์„œ ์ฟผ๋ฆฌ ์‹คํ–‰

    Google Cloud ์ฝ˜์†”์—์„œ ๊ฐœ๋ฐœํ•œ ์ฟผ๋ฆฌ๋ฅผ ๊ฐ€์ ธ์™€ bq ๋ช…๋ น์ค„ ๋„๊ตฌ์—์„œ ์‹คํ–‰ํ•˜๋ ค๋ฉด ๋‹ค์Œ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

    1. bq query --use_legacy_sql=false 'QUERY' ๊ฐ™์ด bq query ๋ช…๋ น์–ด์— ์ฟผ๋ฆฌ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. QUERY๋ฅผ ์ฟผ๋ฆฌ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    2. ์ฟผ๋ฆฌ ๋ฌธ์ž์—ด์˜ ํ˜•์‹์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

      ์ฟผ๋ฆฌ ๋‚ด์— ์ถ”๊ฐ€ ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ ์ค‘์ธ ์…ธ(์˜ˆ: Bash ๋˜๋Š” PowerShell)์˜ ๋”ฐ์˜ดํ‘œ ๊ทœ์น™์„ ๋”ฐ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

      ๋‹ค์Œ ์˜ˆ์‹œ๋Š” Bash์˜ ์ผ๋ฐ˜์ ์ธ ์ ‘๊ทผ๋ฐฉ์‹์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์ฆ‰, ํฐ๋”ฐ์˜ดํ‘œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฟผ๋ฆฌ์—์„œ ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด์„ ๋‚˜ํƒ€๋‚ธ ๋‹ค์Œ ์ฟผ๋ฆฌ ์ž์ฒด๋ฅผ ์ž‘์€๋”ฐ์˜ดํ‘œ๋กœ ๋ฌถ์Šต๋‹ˆ๋‹ค.

      'SELECT * FROM mydataset.mytable WHERE column1 = "value";'
      

      ๋‹ค๋ฅธ ์œ„์น˜์—์„œ ์ฟผ๋ฆฌ๋ฅผ ๋ณต์‚ฌํ•˜๋Š” ๊ฒฝ์šฐ ์ฟผ๋ฆฌ์˜ ์ฃผ์„๋„ ์‚ญ์ œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

      ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ Google Cloud ์ฝ˜์†” ์ฟผ๋ฆฌ๋ฅผ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

      -- count Shakespeare's use of the string "raisin"
      SELECT
        word,
        SUM(word_count) AS count
      FROM
        `bigquery-public-data`.samples.shakespeare
      WHERE
        word LIKE '%raisin%'
      GROUP BY
        word
      

      ๋‹ค์Œ๊ณผ ๊ฐ™์ด bq ๋ช…๋ น์ค„ ๋„๊ตฌ ์ฟผ๋ฆฌ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

      bq query --use_legacy_sql=false \
      'SELECT
        word,
        SUM(word_count) AS count
      FROM
        `bigquery-public-data`.samples.shakespeare
      WHERE
        word LIKE "%raisin%"
      GROUP BY
        word'
      

    ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋Œ€ํ™”ํ˜• ๋ฐ ์ผ๊ด„ ์ฟผ๋ฆฌ ์ž‘์—… ์‹คํ–‰์„ ์ฐธ์กฐํ•˜์„ธ์š”.

    ๋„์›€๋ง ๋ณด๊ธฐ

    bq ๋ช…๋ น์ค„ ๋„๊ตฌ์— ๋Œ€ํ•œ ๋„์›€๋ง์„ ๋ณด๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”.

    • ์„ค์น˜๋œ bq ๋ช…๋ น์ค„ ๋„๊ตฌ ๋ฒ„์ „์„ ํ™•์ธํ•˜๋ ค๋ฉด bq version์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
    • ์ „์ฒด ๋ช…๋ น์–ด ๋ชฉ๋ก์„ ํ™•์ธํ•˜๋ ค๋ฉด bq help๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
    • ์ „์—ญ ํ”Œ๋ž˜๊ทธ ๋ชฉ๋ก์„ ํ™•์ธํ•˜๋ ค๋ฉด bq --help๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
    • ํŠน์ • ๋ช…๋ น์–ด์˜ ๋„์›€๋ง์„ ํ™•์ธํ•˜๋ ค๋ฉด bq help COMMAND๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
    • ํŠน์ • ๋ช…๋ น์–ด ๋ฐ ์ „์—ญ ํ”Œ๋ž˜๊ทธ ๋ชฉ๋ก์— ๋Œ€ํ•œ ๋„์›€๋ง์€ bq COMMAND --help๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

    COMMAND๋ฅผ ๋„์›€์ด ํ•„์š”ํ•œ ๋ช…๋ น์–ด๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    ๋ช…๋ น์ค„ ํ”Œ๋ž˜๊ทธ ๊ธฐ๋ณธ๊ฐ’ ์„ค์ •

    bq ๋ช…๋ น์ค„ ๋„๊ตฌ์˜ ๊ตฌ์„ฑ ํŒŒ์ผ์ธ .bigqueryrc์— ๋ช…๋ น์ค„ ํ”Œ๋ž˜๊ทธ๋ฅผ ํฌํ•จํ•˜์—ฌ ๋ช…๋ น์ค„ ํ”Œ๋ž˜๊ทธ์˜ ๊ธฐ๋ณธ๊ฐ’์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์˜ต์…˜์„ ๊ตฌ์„ฑํ•˜๋ ค๋ฉด ๋จผ์ € .bigqueryrc ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์›ํ•˜๋Š” ํ…์ŠคํŠธ ํŽธ์ง‘๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. .bigqueryrc ํŒŒ์ผ์„ ๋งŒ๋“  ํ›„ --bigqueryrc ์ „์—ญ ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    --bigqueryrc ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด BIGQUERYRC ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ์‚ฌ์šฉ๋˜๋ฉฐ ์ด๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ฒฝ๋กœ ~/.bigqueryrc๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๊ฒฝ๋กœ๋Š” $HOME/.bigqueryrc์ž…๋‹ˆ๋‹ค.

    .bigqueryrc์— ํ”Œ๋ž˜๊ทธ ์ถ”๊ฐ€

    .bigqueryrc์— ๋ช…๋ น์ค„ ํ”Œ๋ž˜๊ทธ์˜ ๊ธฐ๋ณธ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ๋‹ค์Œ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

    • ํŒŒ์ผ ๋งจ ์œ„์— ํ—ค๋” ์—†์ด ์ „์—ญ ํ”Œ๋ž˜๊ทธ๋ฅผ ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค.
    • ๋ช…๋ น์–ด๋ณ„ ํ”Œ๋ž˜๊ทธ์˜ ๊ฒฝ์šฐ ๋Œ€๊ด„ํ˜ธ ์•ˆ์— ๋ช…๋ น์–ด ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜๊ณ  ๊ทธ ์•„๋ž˜์— ๋ช…๋ น์–ด๋ณ„ ํ”Œ๋ž˜๊ทธ๋ฅผ ํ•œ ํ–‰์— ํ•˜๋‚˜์”ฉ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

    ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    --apilog=stdout
    --format=prettyjson
    --location=US
    
    [query]
    --use_legacy_sql=false
    --max_rows=100
    --maximum_bytes_billed=10000000
    
    [load]
    --destination_kms_key=projects/myproject/locations/mylocation/keyRings/myRing/cryptoKeys/myKey

    ์•ž์˜ ์˜ˆ์‹œ์—์„œ๋Š” ๋‹ค์Œ ํ”Œ๋ž˜๊ทธ์˜ ๊ธฐ๋ณธ๊ฐ’์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

    • ์ „์—ญ ํ”Œ๋ž˜๊ทธ --apilog๋ฅผ stdout๋กœ ์„ค์ •ํ•˜์—ฌ ๋””๋ฒ„๊น… ์ถœ๋ ฅ์„Google Cloud ์ฝ˜์†”์— ์ธ์‡„ํ•ฉ๋‹ˆ๋‹ค.
    • ์ „์—ญ ํ”Œ๋ž˜๊ทธ --format์„ prettyjson์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” JSON ํ˜•์‹์œผ๋กœ ๋ช…๋ น์–ด ๊ฒฐ๊ณผ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
    • ์ „์—ญ ํ”Œ๋ž˜๊ทธ --location์„ US ๋ฉ€ํ‹ฐ ๋ฆฌ์ „ ์œ„์น˜๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    • query ๋ช…๋ น์–ด๋ณ„ ํ”Œ๋ž˜๊ทธ --use_legacy_sql์„ false๋กœ ์„ค์ •ํ•˜์—ฌ GoogleSQL์„ ๊ธฐ๋ณธ ์ฟผ๋ฆฌ ๋ฌธ๋ฒ•์œผ๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

    • query ๋ช…๋ น์–ด๋ณ„ ํ”Œ๋ž˜๊ทธ --max_rows๋ฅผ 100์œผ๋กœ ์„ค์ •๋˜์–ด ์ฟผ๋ฆฌ ์ถœ๋ ฅ์˜ ํ–‰ ์ˆ˜๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.

    • query ๋ช…๋ น์–ด๋ณ„ ํ”Œ๋ž˜๊ทธ --maximum_bytes_billed๋ฅผ 10,000,000๋ฐ”์ดํŠธ(10MB)๋กœ ์„ค์ •ํ•˜์—ฌ 10MB๊ฐ€ ๋„˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ์ฟผ๋ฆฌ๊ฐ€ ์‹คํŒจํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

    • load ๋ช…๋ น์–ด๋ณ„ ํ”Œ๋ž˜๊ทธ --destination_kms_key๊ฐ€ projects/myproject/locations/mylocation/keyRings/myRing/cryptoKeys/myKey๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

    ๋Œ€ํ™”ํ˜• ์…ธ์—์„œ bq ๋ช…๋ น์ค„ ๋„๊ตฌ ์‹คํ–‰

    ๋ช…๋ น์–ด์— bq ํ”„๋ฆฌํ”ฝ์Šค๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๋Œ€ํ™”ํ˜• ์…ธ์—์„œ bq ๋ช…๋ น์ค„ ๋„๊ตฌ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€ํ™”ํ˜• ๋ชจ๋“œ๋ฅผ ์‹œ์ž‘ํ•˜๋ ค๋ฉด bq shell์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์…ธ์ด ์‹œ์ž‘๋˜๋ฉด ํ”„๋กฌํ”„ํŠธ๊ฐ€ ๊ธฐ๋ณธ ํ”„๋กœ์ ํŠธ์˜ ID๋กœ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค. ๋Œ€ํ™”ํ˜• ๋ชจ๋“œ๋ฅผ ์ข…๋ฃŒํ•˜๋ ค๋ฉด exit๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

    ์Šคํฌ๋ฆฝํŠธ์—์„œ bq ๋ช…๋ น์ค„ ๋„๊ตฌ ์‹คํ–‰

    ์Šคํฌ๋ฆฝํŠธ์—์„œ Google Cloud CLI ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์Šคํฌ๋ฆฝํŠธ์—์„œ bq ๋ช…๋ น์ค„ ๋„๊ตฌ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ bash ์Šคํฌ๋ฆฝํŠธ์˜ gcloud ๋ฐ bq ๋ช…๋ น์–ด ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

    #!/bin/bash
    gcloud config set project myProject
    bq query --use_legacy_sql=false --destination_table=myDataset.myTable \
    'SELECT
       word,
       SUM(word_count) AS count
     FROM
       `bigquery-public-data`.samples.shakespeare
     WHERE
       word LIKE "%raisin%"
     GROUP BY
       word'
    

    ์„œ๋น„์Šค ๊ณ„์ •์—์„œ bq ๋ช…๋ น์–ด ์‹คํ–‰

    ์„œ๋น„์Šค ๊ณ„์ •์„ ์‚ฌ์šฉํ•˜์—ฌ ์Šน์ธ๋œ API ํ˜ธ์ถœ์„ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜ ์ž๋™์œผ๋กœ ์ฟผ๋ฆฌ ์ž‘์—…์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. bq ๋ช…๋ น์ค„ ๋„๊ตฌ์—์„œ ์„œ๋น„์Šค ๊ณ„์ •์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์„œ๋น„์Šค ๊ณ„์ •์—์„œ Google Cloud ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์Šน์ธํ•˜์„ธ์š”. ์ž์„ธํ•œ ๋‚ด์šฉ์€ gcloud auth activate-service-account๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

    ์„œ๋น„์Šค ๊ณ„์ • ๊ฐ€์žฅ์„ ์‚ฌ์šฉํ•˜์—ฌ bq ๋ช…๋ น์–ด ์‹คํ–‰์„ ์‹œ์ž‘ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    gcloud config set auth/impersonate_service_account SERVICE_ACCOUNT_NAME

    SERVICE_ACCOUNT_NAME์„ ์„œ๋น„์Šค ๊ณ„์ • ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    ์ด์ œ ์‚ฌ์šฉ์ž๊ฐ€ ์‹คํ–‰ํ•˜๋Š” bq ๋ช…๋ น์–ด์—์„œ ์„œ๋น„์Šค ๊ณ„์ • ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

    ์„œ๋น„์Šค ๊ณ„์ •์—์„œ bq ๋ช…๋ น์–ด ์‹คํ–‰์„ ์ค‘์ง€ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    gcloud config unset auth/impersonate_service_account

    ์˜ˆ

    BigQuery ๋ฌธ์„œ์˜ ์•ˆ๋‚ด ๊ฐ€์ด๋“œ ์„น์…˜์— ๋ช…๋ น์ค„ ์˜ˆ์‹œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์„น์…˜์—๋Š” BigQuery ๋ฆฌ์†Œ์Šค ๋งŒ๋“ค๊ธฐ, ๊ฐ€์ ธ์˜ค๊ธฐ, ๋‚˜์—ด, ์‚ญ์ œ, ์ˆ˜์ •๊ณผ ๊ฐ™์€ ์ผ๋ฐ˜์ ์ธ ๋ช…๋ น์ค„ ์ž‘์—…์— ๋Œ€ํ•œ ๋งํฌ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

    ๋ฆฌ์†Œ์Šค ๋งŒ๋“ค๊ธฐ

    bq ๋ช…๋ น์ค„ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ์†Œ์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ ํ•ญ๋ชฉ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

    ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“œ๋Š” ์˜ˆ์— ๋Œ€ํ•ด์„œ๋Š” ๋ฐ์ดํ„ฐ ๋กœ๋“œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

    ๋ฆฌ์†Œ์Šค ์ •๋ณด ๊ฐ€์ ธ์˜ค๊ธฐ

    bq ๋ช…๋ น์ค„ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ์†Œ์Šค ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ ํ•ญ๋ชฉ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

    ๋ฆฌ์†Œ์Šค ๋‚˜์—ด

    bq ๋ช…๋ น์ค„ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ์†Œ์Šค๋ฅผ ๋‚˜์—ดํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ ํ•ญ๋ชฉ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

    ์ž‘์—… ๋‚˜์—ด

    bq ๋ช…๋ น์ค„ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—…์„ ๋‚˜์—ดํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ ํ•ญ๋ชฉ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

    ๋ฆฌ์†Œ์Šค ์—…๋ฐ์ดํŠธ

    bq ๋ช…๋ น์ค„ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ์†Œ์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ ํ•ญ๋ชฉ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

    ๋ฐ์ดํ„ฐ ๋กœ๋“œ

    bq ๋ช…๋ น์ค„ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋“œํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ ํ•ญ๋ชฉ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

    ๋ฐ์ดํ„ฐ ์ฟผ๋ฆฌ

    bq ๋ช…๋ น์ค„ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ฟผ๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ ํ•ญ๋ชฉ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

    ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ ์†Œ์Šค ์‚ฌ์šฉ

    bq ๋ช…๋ น์ค„ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ ์†Œ์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฟผ๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ ํ•ญ๋ชฉ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

    ๋ฐ์ดํ„ฐ ๋‚ด๋ณด๋‚ด๊ธฐ

    bq ๋ช…๋ น์ค„ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚ด๋ณด๋‚ด๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ ํ•ญ๋ชฉ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

    BigQuery Data Transfer Service ์‚ฌ์šฉ

    BigQuery Data Transfer Service์—์„œ bq ๋ช…๋ น์ค„ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ ํ•ญ๋ชฉ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

    bq ๋ช…๋ น์ค„ ๋„๊ตฌ ๋ฌธ์ œ ํ•ด๊ฒฐ

    ์ด ์„น์…˜์—์„œ๋Š” bq ๋ช…๋ น์ค„ ๋„๊ตฌ ๊ด€๋ จ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

    gcloud CLI๋ฅผ ์ตœ์‹  ์ƒํƒœ๋กœ ์œ ์ง€

    Google Cloud CLI์—์„œ bq ๋ช…๋ น์ค„ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ gcloud CLI ์„ค์น˜๋ฅผ ์ตœ์‹  ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜์—ฌ bq ๋ช…๋ น์ค„ ๋„๊ตฌ์˜ ์ตœ์‹  ๊ธฐ๋Šฅ๊ณผ ์ˆ˜์ •์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. ์ตœ์‹  ๋ฒ„์ „์˜ gcloud CLI๋ฅผ ์‹คํ–‰ ์ค‘์ธ์ง€ ํ™•์ธํ•˜๋ ค๋ฉด Cloud Shell์—์„œ ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

    gcloud components list
    

    ์ถœ๋ ฅ์˜ ์ฒ˜์Œ ๋‘ ์ค„์—๋Š” ํ˜„์žฌ gcloud CLI ์„ค์น˜์˜ ๋ฒ„์ „ ๋ฒˆํ˜ธ์™€ ์ตœ์‹  gcloud CLI์˜ ๋ฒ„์ „ ๋ฒˆํ˜ธ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋ฒ„์ „์ด ์ตœ์‹  ์ƒํƒœ๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ Cloud Shell์—์„œ ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ gcloud CLI ์„ค์น˜๋ฅผ ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    gcloud components update
    

    ๋””๋ฒ„๊น…

    ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ bq ๋ช…๋ น์ค„ ๋„๊ตฌ๋ฅผ ๋””๋ฒ„๊น…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • ๋ณด๋‚ด๊ณ  ๋ฐ›์€ ์š”์ฒญ ํ™•์ธ. --apilog=PATH_TO_FILE ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ž‘์—… ๋กœ๊ทธ๋ฅผ ๋กœ์ปฌ ํŒŒ์ผ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. PATH_TO_FILE์„ ๋กœ๊ทธ๋ฅผ ์ €์žฅํ•  ๊ฒฝ๋กœ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. bq ๋ช…๋ น์ค„ ๋„๊ตฌ๋Š” ํ‘œ์ค€ REST ๊ธฐ๋ฐ˜ API ํ˜ธ์ถœ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ์ž‘๋™ํ•˜๋ฏ€๋กœ ๋ณด๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ฌธ์ œ ๋ณด๊ณ  ์‹œ ์ด ๋กœ๊ทธ๋ฅผ ์ฒจ๋ถ€ํ•˜๋Š” ๊ฒƒ์ด ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ฒฝ๋กœ ๋Œ€์‹  - ๋˜๋Š” stdout๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋กœ๊ทธ๊ฐ€ Google Cloud ์ฝ˜์†”์— ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค. --apilog๋ฅผ stderr๋กœ ์„ค์ •ํ•˜๋ฉด ๋กœ๊ทธ๊ฐ€ ํ‘œ์ค€ ์˜ค๋ฅ˜ ํŒŒ์ผ๋กœ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค. ๋” ๋งŽ์€ ์š”์ฒญ์„ ๋กœ๊น…ํ•˜๋ ค๋ฉด --httplib2_debuglevel=LOG_LEVEL ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. LOG_LEVEL์ด ๋†’์„์ˆ˜๋ก http ์š”์ฒญ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ •๋ณด๊ฐ€ ๋กœ๊น…๋ฉ๋‹ˆ๋‹ค.

    • ๋ฌธ์ œ ํ•ด๊ฒฐ. ์ž‘์—… ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๊ฑฐ๋‚˜ ํ…Œ์ด๋ธ” ๋ฐ ๋ฐ์ดํ„ฐ ์„ธํŠธ์™€ ๊ฐ™์€ ๋ฆฌ์†Œ์Šค์˜ ์ž์„ธํ•œ ์ •๋ณด๋ฅผ ๋ณด๋ ค๋ฉด --format=prettyjson ํ”Œ๋ž˜๊ทธ๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์ด ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด reason ์†์„ฑ์„ ํฌํ•จํ•˜์—ฌ JSON ํ˜•์‹์˜ ์‘๋‹ต์ด ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค. reason ์†์„ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌธ์ œ ํ•ด๊ฒฐ ๋‹จ๊ณ„๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹คํ–‰ ์ค‘ ์˜ค๋ฅ˜์— ๊ด€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ --debug_mode ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.