작업 관리

BigQuery 작업을 제출한 후에는 작업 데이터 보기, 작업 나열, 작업 취소, 작업 재실행을 수행할 수 있습니다.

작업이 제출되면 세 가지 상태 중 하나가 됩니다.

  • PENDING — 일정이 예약됨
  • RUNNING
  • DONESUCCESS 또는 FAILURE(작업이 완료되었으나 오류가 발생한 경우)로 보고됨

작업 데이터 보기

GCP Console, 기본 웹 UI, CLI, API를 사용하여 작업 데이터 및 메타데이터를 볼 수 있습니다. 이 데이터에는 작업 유형, 작업 상태, 작업을 실행한 사용자와 같은 세부정보가 포함됩니다.

필수 권한

작업 데이터와 메타데이터를 얻으려면 bigquery.jobs.get 권한이 있어야 합니다. 프로젝트 수준의 사전 정의된 다음 IAM 역할에는 bigquery.jobs.get 권한이 포함됩니다.

계정에 bigquery.admin 역할을 부여하면 사용자는 누가 작업을 제출했든 관계없이 프로젝트의 모든 작업 데이터를 볼 수 있습니다.

다음 역할에는 자신이 생성한 작업에 대한 bigquery.jobs.get 권한이 부여됩니다. 이 사용자는 자신이 제출한 작업의 작업 데이터만 볼 수 있습니다.

BigQuery의 IAM 역할과 권한에 대한 자세한 내용은 액세스 제어를 참조하세요.

작업에 대한 정보 보기

작업에 대한 정보를 보려면 다음과 같이 하세요.

기본 UI

  1. 탐색 창에서 작업 기록을 클릭합니다.

  2. 최근 작업 섹션에서 작업을 클릭하여 세부정보를 봅니다.

CLI

-j 플래그 및 job_id 매개변수를 지정하여 bq show 명령어를 실행합니다. --location 플래그를 지정하고 값을 사용자 위치로 설정합니다.

다음 명령어는 작업에 대한 정보를 요청합니다.

bq --location=[LOCATION] show -j [JOB_ID]

각 항목의 의미는 다음과 같습니다.

  • [LOCATION]은 작업이 실행되는 위치의 이름입니다. 예를 들어 도쿄 지역에서 BigQuery를 사용하는 경우 플래그 값을 asia-northeast1로 설정합니다. .bigqueryrc 파일을 사용하여 위치 기본값을 설정할 수 있습니다.
  • [JOB_ID]는 작업의 ID입니다.

예를 들면 다음과 같습니다.

다음 명령어는 US 다중 지역 위치의 myproject에서 실행되는 작업 bquijob_123x456_123y123z123c에 대한 요약 정보를 가져옵니다.

bq --location=US show -j myproject:bquijob_123x456_123y123z123c

출력이 다음과 같이 표시됩니다.

 Job Type    State      Start Time      Duration      User Email       Bytes Processed   Bytes Billed   Billing Tier   Labels


extract SUCCESS 06 Jul 11:32:10 0:01:41 user@example.com

전체 작업 세부정보를 보려면 다음을 입력하세요.

bq --location=US show --format=prettyjson -j myproject:bquijob_123x456_789y123z456c

출력이 다음과 같이 표시됩니다.

{
  "configuration": {
    "extract": {
      "compression": "NONE",
      "destinationUri": "[URI removed]",
      "destinationUris": [
        "[URI removed]"
      ],
      "sourceTable": {
        "datasetId": "github_repos",
        "projectId": "bigquery-public-data",
        "tableId": "commits"
      }
    }
  },
  "etag": "\"[etag removed]\"",
  "id": "myproject:bquijob_123x456_789y123z456c",
  "jobReference": {
    "jobId": "bquijob_123x456_789y123z456c",
    "projectId": "[Project ID removed]"
  },
  "kind": "bigquery#job",
  "selfLink": "https://www.googleapis.com/bigquery/v2/projects/federated-testing/jobs/bquijob_123x456_789y123z456c",
  "statistics": {
    "creationTime": "1499365894527",
    "endTime": "1499365894702",
    "startTime": "1499365894702"
  },
  "status": {
    "errorResult": {
      "debugInfo": "[Information removed for readability]",
      "message": "Operation cannot be performed on a nested schema. Field: author",
      "reason": "invalid"
    },
    "errors": [
      {
        "message": "Operation cannot be performed on a nested schema. Field: author",
        "reason": "invalid"
      }
    ],
    "state": "DONE"
  },
  "user_email": "user@example.com"
}

다음 명령어는 asia-northeast1 지역의 myproject에서 실행되는 작업 bquijob_123x456_123y123z123c에 대한 요약 정보를 가져옵니다.

bq --location=asia-northeast1 show -j myproject:bquijob_123x456_123y123z123c

API

jobs.get을 호출하고 jobIdprojectId 매개변수를 지정합니다. location 매개변수를 지정하고 값을 작업이 실행되는 위치로 설정합니다.

Go

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

// To run this sample, you will need to create (or reuse) a context and
// an instance of the bigquery client.  For example:
// import "cloud.google.com/go/bigquery"
// ctx := context.Background()
// client, err := bigquery.NewClient(ctx, "your-project-id")
job, err := client.JobFromID(ctx, jobID)
if err != nil {
	return err
}

status := job.LastStatus()
state := "Unknown"
switch status.State {
case bigquery.Pending:
	state = "Pending"
case bigquery.Running:
	state = "Running"
case bigquery.Done:
	state = "Done"
}
fmt.Printf("Job %s was created %v and is in state %s\n",
	jobID, status.Statistics.CreationTime, state)

Python

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

# TODO(developer): Uncomment the lines below and replace with your values.
# from google.cloud import bigquery
# client = bigquery.Client()
# job_id = 'bq-job-123x456-123y123z123c'  # replace with your job ID
# location = 'us'                         # replace with your location

job = client.get_job(job_id, location=location)  # API request

# Print selected job properties
print('Details for job {} running in {}:'.format(job_id, location))
print('\tType: {}\n\tState: {}\n\tCreated: {}'.format(
    job.job_type, job.state, job.created))

프로젝트의 작업 나열

프로젝트에서는 지난 6개월 동안 생성된 모든 작업의 작업 기록을 유지합니다. 50일이 넘은 작업의 자동 삭제를 요청하려면 지원팀에 문의하세요.

Google Cloud Platform Console, 기본 웹 UI, CLI, API를 통해 BigQuery 작업 기록을 볼 수 있습니다. 이 기록에는 RUNNING 상태의 작업 및 DONE 상태의 작업(상태를 SUCCESS 또는 FAILURE로 표시)이 포함됩니다.

필수 권한

작업을 나열하려면 bigquery.jobs.list 권한이 있어야 합니다. 프로젝트 수준의 사전 정의된 다음 IAM 역할에는 bigquery.jobs.list 권한이 포함됩니다.

bigquery.jobs.list 권한을 부여받으면 프로젝트의 모든 작업을 나열할 수 있지만, 다른 사용자가 제출한 작업은 세부정보 및 메타데이터가 수정됩니다. bigquery.jobs.list 권한이 있으면 자신이 생성한 작업의 전체 세부정보를 볼 수 있습니다.

다른 사용자가 생성한 작업의 세부정보를 포함하여 모든 작업을 나열하려면 bigquery.jobs.listAll 권한이 있어야 합니다. bigquery.admin 역할에는 bigquery.jobs.listAll 권한만 있습니다.

다음 역할에는 자신이 생성한 작업에 대해서만 bigquery.jobs.list 권한이 부여됩니다. 이 사용자는 자신이 제출한 작업만 나열할 수 있습니다.

BigQuery의 IAM 역할과 권한에 대한 자세한 내용은 액세스 제어를 참조하세요.

작업 나열

프로젝트의 작업을 나열할 때는 위치를 제공할 필요가 없습니다. 현재까지 작업은 모든 위치에 대해 나열됩니다.

프로젝트의 작업을 나열하는 방법은 다음과 같습니다.

기본 UI

  1. 탐색 창에서 작업 기록을 클릭합니다.

  2. 최근 작업 섹션에 작업이 생성된 시간을 기준으로 가장 최근 작업이 맨 위에 오도록 나열됩니다. 이 목록에는 현재 사용자의 작업만 포함됩니다. 모든 작업을 보려면 명령줄 도구 또는 API를 사용하세요.

CLI

다음 플래그 중 하나를 사용하여 bq ls 명령을 실행합니다.

  • -j는 작업을 나열할 리소스로 식별하는 데 사용됩니다.
  • --all 또는 -a는 모든 사용자의 작업을 나열합니다. 모든 작업의 전체(수정되지 않은) 세부정보를 보려면 bigquery.jobs.listAll 권한이 있어야 합니다.
  • min_creation_time은 제공된 타임스탬프 값 이후의 작업을 나열하기 위해 사용됩니다.
  • max_creation_time은 제공된 타임스탬프 값 이전의 작업을 나열하기 위해 사용됩니다.
  • -n은 결과를 제한합니다.

    bq ls -j -a --min_creation_time [INTEGER1] --max_creation_time [INTEGER2] -n [INTEGER3] [PROJECT_ID]

각 항목의 의미는 다음과 같습니다.

  • [INTEGER1]은 타임스탬프를 나타내는 정수입니다.
  • [INTEGER2]는 타임스탬프를 나타내는 정수입니다.
  • [INTEGER3]은 반환된 작업 수를 나타내는 정수입니다.
  • [PROJECT_ID]는 나열하려는 작업이 포함된 프로젝트의 ID입니다. 기본 프로젝트를 설정하면 [PROJECT_ID] 매개변수를 지정할 필요가 없습니다.

예를 들면 다음과 같습니다.

다음 명령어는 현재 사용자의 모든 작업을 나열합니다. 이 명령어를 실행하려면 bigquery.jobs.list 권한이 필요합니다.

bq ls -j myproject

다음 명령어는 모든 사용자의 모든 작업을 나열합니다. 이 명령어를 실행하려면 bigquery.jobs.listAll 권한이 필요합니다.

bq ls -j -a myproject

다음 명령어는 myproject에서 가장 최근의 작업 10개를 나열합니다.

bq ls -j -a -n 10 myproject

다음 명령어는 2018년 10월 18일 오후 4:04:53 이전에 제출된 모든 작업을 나열합니다. 이 타임스탬프(밀리초)는 다음 정수 값: 1539903893000과 동일합니다.

bq ls -j -max_creation_time 1539903893000

API

jobs.list를 호출하고 projectId 매개변수를 지정합니다. 모든 사용자의 작업을 나열하려면 allUsers 매개변수를 true로 설정합니다. allUserstrue로 설정하려면 bigquery.jobs.listAll 권한이 필요합니다.

Go

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

// To run this sample, you will need to create (or reuse) a context and
// an instance of the bigquery client.  For example:
// import "cloud.google.com/go/bigquery"
// ctx := context.Background()
// client, err := bigquery.NewClient(ctx, "your-project-id")
it := client.Jobs(ctx)
for i := 0; i < 10; i++ {
	j, err := it.Next()
	if err == iterator.Done {
		break
	}
	if err != nil {
		return err
	}
	state := "Unknown"
	switch j.LastStatus().State {
	case bigquery.Pending:
		state = "Pending"
	case bigquery.Running:
		state = "Running"
	case bigquery.Done:
		state = "Done"
	}
	fmt.Printf("Job %s in state %s\n", j.ID(), state)
}

자바

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

Page<Job> jobs = bigquery.listJobs(JobListOption.pageSize(100));
for (Job job : jobs.iterateAll()) {
  // do something with the job
}

Python

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

# TODO(developer): Uncomment the lines below and replace with your values.
# from google.cloud import bigquery
# project = 'my_project'  # replace with your project ID
# client = bigquery.Client(project=project)
import datetime

# List the 10 most recent jobs in reverse chronological order.
# Omit the max_results parameter to list jobs from the past 6 months.
print("Last 10 jobs:")
for job in client.list_jobs(max_results=10):  # API request(s)
    print(job.job_id)

# The following are examples of additional optional parameters:

# Use min_creation_time and/or max_creation_time to specify a time window.
print("Jobs from the last ten minutes:")
ten_mins_ago = datetime.datetime.utcnow() - datetime.timedelta(minutes=10)
for job in client.list_jobs(min_creation_time=ten_mins_ago):
    print(job.job_id)

# Use all_users to include jobs run by all users in the project.
print("Last 10 jobs run by all users:")
for job in client.list_jobs(max_results=10, all_users=True):
    print("{} run by user: {}".format(job.job_id, job.user_email))

# Use state_filter to filter by job state.
print("Jobs currently running:")
for job in client.list_jobs(state_filter='RUNNING'):
    print(job.job_id)

작업 취소

GCP Console, 기본 웹 UI, CLI 또는 API에서 RUNNING 또는 PENDING 작업을 취소할 수 있습니다. 하지만 모든 작업 유형을 취소할 수 있지는 않습니다. 작업을 취소할 수 없으면 오류가 반환됩니다.

직업을 취소할 수 있어도 성공은 보장되지 않습니다. 취소 요청이 제출될 때 작업이 이미 완료되었거나, 작업을 취소할 수 없는 단계가 되었을 수 있습니다.

필수 권한

작업을 취소하려면 bigquery.jobs.update 권한이 있어야 합니다. 다음과 같은 프로젝트 수준의 사전 정의된 IAM 역할에는 bigquery.jobs.update 권한이 포함됩니다.

계정에 bigquery.admin 역할을 부여하면 그 사용자는 작업을 누가 제출했든 관계없이 이용 가능한 모든 작업을 취소할 수 있습니다.

다음 역할은 자신이 생성한 작업을 취소할 수 있습니다. 이 사용자는 자신이 제출한 작업만 취소할 수 있습니다.

BigQuery의 IAM 역할과 권한에 대한 자세한 내용은 액세스 제어를 참조하세요.

작업 취소

작업을 취소하는 방법은 다음과 같습니다.

기본 UI

  1. 탐색 창에서 작업 기록을 클릭합니다.

  2. 최근 작업 섹션에서 취소할 작업을 클릭합니다. 가장 최근의 작업이 목록 맨 위에 표시됩니다.

  3. 작업 세부 정보에서 작업 취소를 클릭합니다.

    작업 취소

CLI

bq cancel 명령어를 job_id 매개변수와 함께 실행합니다. --nosync 플래그를 사용하여 취소를 요청하고 즉시 결과를 반환할 수 있습니다. 기본적으로 취소 요청은 완료될 때까지 대기합니다.

작업 ID를 제공할 때 정규화된 ID 또는 간단한 형식을 사용할 수 있습니다. 예를 들어 BigQuery 웹 UI에 나열되는 작업 ID는 정규화된 형식이며 프로젝트 및 위치를 포함합니다.

my-project-1234:US.bquijob_123x456_123y123z123c

명령줄 도구의 작업 ID는 프로젝트 ID와 위치가 포함되지 않은 간단한 형식을 사용하여 나열됩니다.

bquijob_123x456_123y123z123c

작업 위치를 지정하려면 --location 플래그를 지정하고 값을 사용자의 위치로 설정합니다. 정규화된 작업 ID를 사용하는 경우 이 플래그는 선택사항입니다. --location 플래그를 포함하고 정규화된 작업 ID를 사용하면 --location 플래그가 무시됩니다.

다음 명령은 작업 취소를 요청하고 완료를 기다립니다. 정규화된 작업 ID가 제공되면 --location 플래그는 무시됩니다.

bq --location=[LOCATION] cancel [JOB_ID]

다음 명령은 작업 취소를 요청하고 즉시 결과를 반환합니다. 정규화된 작업 ID가 제공되면 --location 플래그는 무시됩니다.

bq --location=[LOCATION] --nosync cancel [JOB_ID]

각 항목의 의미는 다음과 같습니다.

  • [LOCATION]은 작업이 실행되는 위치의 이름입니다. 예를 들어 도쿄 지역에서 BigQuery를 사용하는 경우 플래그 값을 asia-northeast1로 설정합니다. .bigqueryrc 파일을 사용하여 위치 기본값을 설정할 수 있습니다.
  • [JOB_ID]는 취소할 작업의 ID입니다. BigQuery 웹 UI에서 작업 ID를 복사하면 프로젝트 ID와 위치가 작업 ID에 포함됩니다. 예를 들면 my-project-1234:US.bquijob_123x456_123y123z123c와 같습니다.

예를 들면 다음과 같습니다.

다음 명령어는 my-project-1234US 다중 지역 위치에서 실행되는 작업 my-project-1234:US.bquijob_123x456_123y123z123c를 취소하고 완료되기를 기다립니다. 정규화된 작업 ID가 사용되므로 위치 플래그가 제공되지 않습니다.

bq cancel my-project-1234:US.bquijob_123x456_123y123z123c

다음 명령어는 my-project-1234US 다중 지역 위치에서 실행되는 작업 bquijob_123x456_123y123z123c를 취소하고 완료되기를 기다립니다. 간단한 형식의 작업 ID가 사용되므로 --location 플래그가 제공됩니다.

bq --location=US cancel bquijob_123x456_123y123z123c

다음 명령어는 my-project-1234US 다중 지역 위치에서 실행되는 작업 bquijob_123x456_123y123z123c를 취소하고 즉시 반환됩니다. 정규화된 작업 ID가 사용되므로 --location 플래그가 제공되지 않습니다.

bq --nosync cancel my-project-1234:US.bquijob_123x456_123y123z123c

API

jobs.cancel을 호출하고 jobIdprojectId 매개변수를 지정합니다. location 매개변수를 지정하고 값을 작업이 실행되는 위치로 설정합니다.

Go

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

// To run this sample, you will need to create (or reuse) a context and
// an instance of the bigquery client.  For example:
// import "cloud.google.com/go/bigquery"
// ctx := context.Background()
// client, err := bigquery.NewClient(ctx, "your-project-id")
job, err := client.JobFromID(ctx, jobID)
if err != nil {
	return nil
}
return job.Cancel(ctx)

Python

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

# TODO(developer): Uncomment the lines below and replace with your values.
# from google.cloud import bigquery
# client = bigquery.Client()
# job_id = 'bq-job-123x456-123y123z123c'  # replace with your job ID
# location = 'us'                         # replace with your location

job = client.cancel_job(job_id, location=location)

작업 반복

동일한 작업 ID를 사용하여 작업을 재실행할 수 없습니다. 대신 동일한 구성으로 새 작업을 만듭니다. GCP Console, 기본 웹 UI 또는 CLI에서 새 작업을 제출하면 새 작업 ID가 지정됩니다. API 또는 클라이언트 라이브러리를 사용하여 작업을 제출하려면 새 작업 ID를 생성해야 합니다.

필수 권한

작업을 실행하려면 bigquery.jobs.create 권한이 있어야 합니다. 다음 프로젝트 레벨의 사전 정의된 IAM 역할에는 bigquery.jobs.create 권한이 포함됩니다.

BigQuery의 IAM 역할과 권한에 대한 자세한 내용은 액세스 제어를 참조하세요.

직업 재실행

작업을 반복하는 방법은 다음과 같습니다.

기본 UI

쿼리 작업을 반복하려면 다음과 같이 합니다.

  1. 탐색 창에서 쿼리 기록을 클릭합니다.

  2. 쿼리 섹션에서 쿼리 오른쪽에 있는 쿼리 열기를 클릭합니다.

  3. 쿼리 실행을 클릭합니다.

로드 작업을 반복하려면 다음과 같이 합니다.

  1. 탐색 창에서 작업 기록을 클릭합니다.

  2. 최근 작업 섹션에서 반복할 작업을 클릭합니다. 가장 최근의 작업이 목록 맨 위에 표시됩니다.

  3. 작업 세부정보에서 로드 작업 반복을 클릭합니다.

CLI

명령을 다시 실행하면 BigQuery에서 자동으로 작업을 새로운 작업 ID로 생성합니다.

API

작업을 반복하는 단일 호출 메소드는 없습니다. 특정 작업을 반복하는 방법은 다음과 같습니다.

  1. jobs.get을 호출하여 반복할 작업의 리소스를 가져옵니다.

  2. id, status, statistics 필드를 제거합니다. jobId 필드를 클라이언트 코드에 의해 생성된 새로운 값으로 변경합니다. 필요한 경우 다른 필드를 변경합니다.

  3. 수정된 리소스와 새로운 작업 ID를 사용하여 jobs.insert를 호출하고 새로운 작업을 시작합니다.

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

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

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