Closed jongfeel closed 2 years ago
야크 털 깎기, 하지만 야크 털 깎기는 필요악
커널 공부도 그러하네요 ㅎㅎ.. 책읽다가 서칭하다가, 서칭, 서칭, 서칭만 하게되는
소켓은 물리적인 cpu의 개수를 의미하고 코어는 물리적인 cpu 안에 몇개의 컴퓨팅 코어가 있는지를 뜻한다.
uname -a
show linux kernel version
'dmesgring buffer 형태로 operation of kernel의 message를 보여준다.
dmidecode -t processor` cpu, core에 대한 정보를 알 수 있다.
dmesg
를 이용해 확인하는 커널 정보 외에 현재 사용 중인 커널의 컴파일 옵션도 확인할 필요가 있다.
커널이 하는 역활
Device: peripheral device
커널이 프로세스를 생성할 때 프로세스마다 고유한 스택 공간을 마련한다. 이 스택 공간(0x80C00000 ~ 0x80C02000 : ARM architecture)에 struct thread_info
구조체 필드가 저장되었다. 이 구조체 필드는 커널이 프로세스를 제어할 때 중요한 정보(선점 스케쥴 여부, 프로세스 컨택스트 정보, 레지스터 세트)를 담고 있다.
데이터세트는…
BigQuery에서는 두 가지 유형의 위치를 사용한다.
데이터 세트를 만들 때는 BigQuery 데이터를 저장할 위치를 지정해야 하며, 데이터 세트를 만든 후에는 위치를 변경할 수 없다.
BigQuery는 데이터를 로드, 쿼리, 내보내기를 수행할 때 요청에서 참조된 데이터 세트를 토대로 작업을 실행할 위치를 결정한다.
US
멀티 리전에서 실행된다.데이터 세트는 아래와 같은 방법들로 만들 수 있다.
bq
cli에서 bq mk
명령어 사용데이터 세트를 만들기 위해서는 bigquery.datasets.create
IAM 권한이 필요하다.
아래 역할에는 데이터 세트를 만드는데 필욯나 권한이 포함되어 있다.
roles/bigquery.dataEditor
roles/bigquery.dataOwner
roles/bigquery.user
roles/bigquery.admin
BigQuery 콘솔에서 작업 옵션을 펼치고 데이터 세트 만들기 선택
테이터 세트 ID, 위치, 테이블 만료 지정 후 생성
아래와 같은 쿼리 수행
CREATE SCHEMA PROJECT_ID.DATASET_ID
OPTIONS (
default_kms_key_name = 'KMS_KEY_NAME',
default_partition_expiration_days = PARTITION_EXPIRATION,
default_table_expiration_days = TABLE_EXPIRATION,
description = 'DESCRIPTION',
labels = [('LABEL_1','VALUE_1'),('LABEL_2','VALUE_2')],
max_time_travel_hours = HOURS);
--location
플래그와 함께 ba mk
명령 실행
bq --location=LOCATION mk \
--dataset \
--default_kms_key=KMS_KEY_NAME \
--default_partition_expiration=PARTITION_EXPIRATION \
--default_table_expiration=TABLE_EXPIRATION \
--description="DESCRIPTION" \
--label=LABEL_1:VALUE_1 \
--label=LABEL_2:VALUE_2 \
--max_time_travel_hours=HOURS \
PROJECT_ID:DATASET_ID
from google.cloud import bigquery
# Construct a BigQuery client object.
client = bigquery.Client()
# TODO(developer): Set dataset_id to the ID of the dataset to create.
# dataset_id = "{}.your_dataset".format(client.project)
# Construct a full Dataset object to send to the API.
dataset = bigquery.Dataset(dataset_id)
# TODO(developer): Specify the geographic location where the dataset should reside.
dataset.location = "US"
# Send the dataset to the API for creation, with an explicit timeout.
# Raises google.api_core.exceptions.Conflict if the Dataset already
# exists within the project.
dataset = client.create_dataset(dataset, timeout=30) # Make an API request.
print("Created dataset {}.{}".format(client.project, dataset.dataset_id))
데이터 세트를 나열하기 위해 아래와 같은 방법을 사용할 수 있다.
INFORMATION_SCHEMA
SQL 쿼리 사용bq
cli에서 bq ls
사용datasets.list
API 메서드 호출위 동작을 수행하기 위해서는 bigquery.datasets.get
IAM 권한이 필요하다.
이 권한이 포함된 역할은 아래와 같다.
roles/bigquery.user
roles/bigquery.dataOwner
roles/bigquery.dataEditor
roles/bigquery.admin
탐색기 패널에서 검색
SELECT
schema_name
FROM
PROJECT_ID.INFORMATION_SCHEMA.SCHEMATA;
bq ls --filter labels.key:value \
--max_results integer \
--format=prettyjson \
--project_id project_id
--filter
를 사용해서 일치하는 데이터 세트를 나열할 수 있다.
labels.key:value
와 같은 형태로 사용한다.--max_results
또는 -n
을 사용해서 최대 결과 수를 제어할 수 있다.
from google.cloud import bigquery
# Construct a BigQuery client object.
client = bigquery.Client()
datasets = list(client.list_datasets()) # Make an API request.
project = client.project
if datasets:
print("Datasets in project {}:".format(project))
for dataset in datasets:
print("\t{}".format(dataset.dataset_id))
else:
print("{} project does not contain any datasets.".format(project))
정보를 가져오는 방법도 비슷하다.
탐색기 패널에서 데이터 세트를 선택한 세트 정보 확인
bq show
명령어를 통해 정보를 확인할 수 있으며 --format
플래그를 사용하여 출력을 제어할 수 있다.
bq show --format=prettyjson project_id:dataset
from google.cloud import bigquery
# Construct a BigQuery client object.
client = bigquery.Client()
# TODO(developer): Set dataset_id to the ID of the dataset to fetch.
# dataset_id = 'your-project.your_dataset'
dataset = client.get_dataset(dataset_id) # Make an API request.
full_dataset_id = "{}.{}".format(dataset.project, dataset.dataset_id)
friendly_name = dataset.friendly_name
print(
"Got dataset '{}' with friendly_name '{}'.".format(
full_dataset_id, friendly_name
)
)
# View dataset properties.
print("Description: {}".format(dataset.description))
print("Labels:")
labels = dataset.labels
if labels:
for label, value in labels.items():
print("\t{}: {}".format(label, value))
else:
print("\tDataset has no labels defined.")
# View tables in dataset.
print("Tables:")
tables = list(client.list_tables(dataset)) # Make an API request(s).
if tables:
for table in tables:
print("\t{}".format(table.table_id))
else:
print("\tThis dataset does not contain any tables.")
아래 방법으로 데이터 세트를 삭제할 수 있다.
DROP SCHEMA
DDL 사용bq
cli에서 bq rm
명령어 사용데이터 세트를 삭제하기 위해서는 다음 IAM 권한이 필요하다.
bigquery.datasets.delete
bigquery.tables.delete
이러한 권한은 아래 역할에 포함되어 있다.
roles/bigquery.dataOwner
roles/bigquery.admin
데이터 세트 삭제 클릭
DROP SCHEMA IF EXISTS mydataset;
bq rm
명령어를 --dataset
또는 -d
플래그와 함께 사용하여 데이터 세트를 삭제한다.
bq rm -r -f -d project_id:dataset
-f
플래그를 사용하면 확인을 건너뛸 수 있다.
프로젝트 id를 포함하면 -d
플래그를 사용하지 않아도 된다.
bq rm -r -f myotherproject:mydataset
from google.cloud import bigquery
# Construct a BigQuery client object.
client = bigquery.Client()
# TODO(developer): Set model_id to the ID of the model to fetch.
# dataset_id = 'your-project.your_dataset'
# Use the delete_contents parameter to delete a dataset and its contents.
# Use the not_found_ok parameter to not receive an error if the dataset has already been deleted.
client.delete_dataset(
dataset_id, delete_contents=True, not_found_ok=True
) # Make an API request.
print("Deleted dataset '{}'.".format(dataset_id))
데이터 세트의 시간 이동 기간 내에 있는 경우 삭제된 데이터 세트를 복원할 수 있다.
새 데이터 세트 만들기
bq mk tmp_dataset
원본 데이터 세트가 삭제되기 전 타임스탬프 사용
1418864998000
[INFORMATION_SCHEMA.TABLE_STORAGE_TIMELINE](https://cloud.google.com/bigquery/docs/information-schema-table-storage-timeline?hl=ko)
뷰에 쿼리를 실행하고 복원할 테이블 식별
SELECT
TABLE_NAME
FROM
`region-REGION`.INFORMATION_SCHEMA.TABLE_STORAGE_TIMELINE
WHERE
TABLE_SCHEMA = "ORIGINAL_DATASET_NAME"
AND
DELETED = true;
1418864998000
시점의 original_dataset.table1
테이블을 새 tmp_dataset
데이터 세트에 복사
bq cp original_dataset.table1@1418864998000 tmp_dataset.table1
Google Cloud 데이터 센터에서 발생할 수 있는 장애에 대한 장에 도메인 유형은 다음과 같다.
BigQuery 데이터 세트를 만들 때 데이터를 저장할 위치(리전, 멀티리전)을 선택 하는데 선택한 위치 내에서 두 개의 서로 다른 영역에 데이터 복사본을 자동으로 저장한다.
BigQuery는 여러 가용성 영역에 걸쳐 중복 스토리지와 컴퓨팅을 결합하여 고가용성과 내구성을 제공한다.
리전 장애로 인해 리전이 다시 온라인 상태가 될 때까지 가용성이 손실될 수 있지만 데이터는 손실되지 않는다.
BigQuery 스토리지 개요 | Google Cloud
Impact of dataset locations on BigQuery query execution performance
https://meet.google.com/jyx-mxnq-kpk
참여 방법:
Assignees에 자신의 github 계정을 self로 추가 2시간 분량의 할 내용에 대해 댓글 작성 (최소 모임 시작 전까지) 빛의 속도 혹은 (주말, 휴일 포함) 최소 3일 내에 구글 캘린더 등록 메일 확인 모임 시간에 각자 개발 관련된 공부 진행
모임 끝난 후 공부한 내용 정리 & 링크 추가 => 최소 다음 모각코 전까지 확인 가능해야 함.
주의: 회사일 혹은 마감 기한 임박한 일 처리의 경우는 최대한 자제해 주세요. 주말 아침에 일하면 우울하니까요. ㅜㅜ