왼쪽 패널에서 +Add Data > Explore public datasets 선택해서 NYC TLC trip 선택하자.
왼쪽 패널에 bigquery-public-data가 표시된다. 그 밑에 new_york_taxi_trips 데이터셋에서 tlc_yellow_trips_2018 테이블을 선택해서 Copy Table을 한다. 테이블 명은 trips로 복사. 당연히 프로젝트밑에 demo_dataset을 목적지로 선택한다.
데이터 카탈로그 태그 템플릿 생성하기
Data Catalog UI에서 태그 템플릿을 생성한다.
Data Catalog > + Create > Create Tag template 선택
탬플릿 이름은 Demo Tag Template, ID는 demo_tag_template, 위치는 기본값을 둔다.
이제 태그 속성을 추가해야 하는데, 속성(attribute)을 필드(field)라고도 부른다.
Add Field를 선택해서 표시명, Field ID, 필수 속성 여부, 데이터 형식을 선택한다. 데이터 형식에는 String, Double, Boolean, Enumerated,Datetime를 선택할 수 있다. Enumerated를 선택할 경우에는 열겨형에서 선택할 수 있는 값을 추가로 선택해 주어야 한다.
테이블에 태그 붙이기
데이터카달로그에서 데이터셋을 검색한다. 오른쪽 상단 카달로그 아이콘을 누르면 검색창이 표시된다. demo_dataset을 선택한다.
태그를 붙이고자하는 테이블을 선택한다. 예에서는 trips 테이블 선택. Entry details페이지를 열고 Attach Tag 를 클릭한다.
gsutil -m cp -r gs://spls/gsp138/cloud-functions-intelligentcontent-nodejs .
cd cloud-functions-intelligentcontent-nodejs
빅쿼리 데이터셋과 테이블 생성하기
비전 API를 사용한 결과를 빅쿼리에 저장할 예정. 데이터셋을 intelligentcontentfilter로, 테이블은 filtered_content로 명명한다. (그냥 config.json에 정의된 대로 생성하는 것에 불과)
export DATASET_ID=intelligentcontentfilter
export TABLE_NAME=filtered_content
bq --project_id ${PROJECT_ID} mk ${DATASET_ID}
bq --project_id ${PROJECT_ID} mk --schema intelligent_content_bq_schema.json -t ${DATASET_ID}.${TABLE_NAME}
#빅쿼리 테이블이 잘 생성되었나 확인
bq --project_id ${PROJECT_ID} show ${DATASET_ID}.${TABLE_NAME}
설정 파일의 placeholder를 실제 값으로 바꾸기
sed -i "s/\[PROJECT-ID\]/$PROJECT_ID/g" config.json
sed -i "s/\[FLAGGED_BUCKET_NAME\]/$FLAGGED_BUCKET_NAME/g" config.json
sed -i "s/\[FILTERED_BUCKET_NAME\]/$FILTERED_BUCKET_NAME/g" config.json
sed -i "s/\[DATASET_ID\]/$DATASET_ID/g" config.json
sed -i "s/\[TABLE_NAME\]/$TABLE_NAME/g" config.json
# 클라우드 펍/섭에서 클라우드 저장소 통지 메시지를 받고, 이 메시지를 클라우드 펍/섭 메시지와 함께 다른 클라우드 함수를 호출하는 함수 배포
gcloud functions deploy GCStoPubsub --runtime nodejs10 --stage-bucket gs://${STAGING_BUCKET_NAME} --trigger-topic ${UPLOAD_NOTIFICATION_TOPIC} --entry-point GCStoPubsub
# 클라우드 펍/섭에서 메시지를 받아서 비전 API를 호출하고 이를 insertIntoBigQuert클라우드 함수로 메시지를 전달하는 함수
gcloud functions deploy visionAPI --runtime nodejs10 --stage-bucket gs://${STAGING_BUCKET_NAME} --trigger-topic visionapiservice --entry-point visionAPI
# 클라우드 펍/섭에서 메시지를 받아서 비전 API를 호출하고 이를 insertIntoBigQuert클라우드 함수로 메시지를 전달하는 함수
gcloud functions deploy videoIntelligenceAPI --runtime nodejs10 --stage-bucket gs://${STAGING_BUCKET_NAME} --trigger-topic videointelligenceservice --entry-point videoIntelligenceAPI --timeout 540
# 클라우드 펍/섭에서 메시지를 받아서 데이터를 빅쿼리 테이블로 넣기 위한 API를 호출하는 함수
gcloud functions deploy insertIntoBigQuery --runtime nodejs10 --stage-bucket gs://${STAGING_BUCKET_NAME} --trigger-topic bqinsert --entry-point insertIntoBigQuery
#배포된 함수 확인
gcloud beta functions list
전체 앱 동작 확인
클라우드 콘솔에서 저장소의 -upload가 붙은 버킷에 이미지/동영상 파일을 업로드해본다.
로그 동작 모니터링
클라우드 함수가 잘 실행되었는지 확인해보기
gcloud beta functions logs read --filter "finished with status" "GCStoPubsub" --limit 100
gcloud beta functions logs read --filter "finished with status" "insertIntoBigQuery" --limit 100
# sql.txt 파일 만들기. PLACEHOLDER 값 변경해야 함.
echo "
#standardSql
SELECT insertTimestamp,
contentUrl,
flattenedSafeSearch.flaggedType,
flattenedSafeSearch.likelihood
FROM \`$PROJECT_ID.$DATASET_ID.$TABLE_NAME\`
CROSS JOIN UNNEST(safeSearch) AS flattenedSafeSearch
ORDER BY insertTimestamp DESC,
contentUrl,
flattenedSafeSearch.flaggedType
LIMIT 1000
" > sql.txt
bq --project_id ${PROJECT_ID} query < sql.txt