BigQuery에서 원하는 데이터를 캡처하는 Firebase Functions 만들기
10319 단어 FirebaseTypeScriptBigQuery데이터 분석gcp
개요
데이터 분석의 첫걸음으로 "데이터 캡처의 (부분적) 자동화"를 해 보았습니다!
GCS의 CSV에서 자동으로 BigQuery로 가져 오는 Functions를 만듭니다.
GUI·CLI에서도 같은 조작을 할 수 있습니다만, 「특정의 버킷에 두면 자동으로 캡처」를 실시하는 것으로, 사내나 팀내에서도 부담없이 BigQuery를 이용할 수 있게 됩니다.
실제로 움직여보세요
1. Google Cloud Storage에 버킷 만들기
이쪽을 참고로 바삭하게 작성
htps : // c ぉ d. 오, ぇ. 이 m / s 토라게 / 드 cs / c 레아 친 g 부 c ts? hl = 그럼
2. BigQuery에 데이터 세트 만들기
공식 문서가 보기 쉽네요. "gcs_temporary_dataset"이라고 했습니다.
htps : // c ぉ d. 오, ぇ. 이 m/비g 쿠에 ry/어느 cs/대충 ts? hl = 그럼
3. Firebase Functions(Cloud Functions)를 이용하여 배포
캡처하는 CSV는 "{filename}_YYYYMMDD.csv"이며 첫 번째 줄은 필드 이름이라는 규칙입니다.
코드를 사용하여 "버킷에 객체가 만들어졌습니다"를 트리거로 지정할 수 있습니다. 최고! ! !
4. 스토리지에 CSV를 배치하고 BigQuery로 가져오기
도쿄도 오픈 데이터 카탈로그 사이트에서 CSV를 다운로드 해 보았습니다.
파일 이름 끝에 "_20200425"를 붙이는 것을 잊지 마십시오.
h tps : // / ぉg. 했다. 메 t로. 가끔. lg. jp / 두드려 t / t000010d0000000068 / 어서
실제로 캡처된 데이터
헤더가 일본어이므로 필드명이 망가져 버리고 있습니다만 일단 성공.
실제 코드
firebase functions와 typescript를 이용하여 만들었습니다.
'use strict';
import {BigQuery} from '@google-cloud/bigquery';
import {bigquery_v2} from 'googleapis';
import Schema$JobConfigurationLoad = bigquery_v2.Schema$JobConfigurationLoad;
import * as functions from 'firebase-functions';
const projectId = // GCPのプロジェクトID
const backetName = // GCSのバケット名
const datasetId = // BQのデータセットID
export const importBigqueryTemporaryTable = functions
.runWith({timeoutSeconds: 300, memory: '1GB'})
.storage.bucket(`${backetName}`)
.object()
.onFinalize(async (object) => {
try {
const name = object.name!;
// ファイル名がテーブル名のイメージ
// hoge_YYYYMMDD以外の名前は許さない
const matched = name.match(/(.*)_\d{8}/);
if (!matched) {
console.log('filename not match.');
return false;
}
const tableId = matched[0];
const bigquery = new BigQuery();
const configuration: Schema$JobConfigurationLoad = {
destinationTable: {
datasetId: datasetId,
projectId: `${projectId}`,
tableId: `${tableId}`,
},
sourceFormat: 'CSV',
sourceUris: [`gs://${object.bucket}/${name}`],
writeDisposition: 'WRITE_TRUNCATE',
autodetect: true,
encoding: 'UTF-8',
skipLeadingRows: 1, // ヘッダーはカラム定義のイメージ
};
await bigquery.createJob({
configuration: {load: configuration},
});
console.log('success to import bigquery temporary table.', tableId);
return Promise.resolve('success');
} catch (e) {
console.log('Failed to import temporary table.', e);
return Promise.reject(e);
}
});
요약
이 코드만으로 "특정 버킷에 넣으면 BigQuery로 가져오기"를 자동화할 수 있었습니다. CSV의 포맷이 올바르지 않을 때는 동작하지 않는 등의 문제는 있습니다만, 최소한의 동작은 실시할 수 있다고 생각합니다.
BigQuery 데이터 세트 설정에서 기본 보존 기한을 설정하면 데이터를 지우는 것을 잊지 않습니다.
질문・지적 기다리고 있습니다!
Reference
이 문제에 관하여(BigQuery에서 원하는 데이터를 캡처하는 Firebase Functions 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/pp_ykyk/items/4109bed07df8f2b3dd66텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)