Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9409

BigQueryにデータを格納

$
0
0
前提 以前作成した下記記事の環境からスタートします。 サービスアカウントを作成 スタートガイドでサービスアカウントを作成 サービスアカウント名を入力 作成して続行をクリック ロールを選択(今回は編集者にしました) 続行をクリック 完了 keyの作成 上記手順で作成したアカウントがあることを確認 そのアカウントのリンクをクリック 「キー」を選択 鍵を追加、「新しい鍵を作成」をクリック 「JSON」 で作成 JSON 上記でダウンロードした「JSON」をpackage.jsonと同じ階層でcredentials.jsonとして保存 envファイルでは、GOOGLE_APPLICATION_CREDENTIALS="./credentials.json"のように保管 BigQuery GCP > BigQuery > SQLワークスペースで予め作成しておくもの プロジェクト データセット 今回BQに入れたいデータ const costGraphData = [ { date: "01-01", cost: 1100 }, { date: "01-02", cost: 1200 }, { date: "01-03", cost: 1000 }, { date: "01-04", cost: 800 }, { date: "01-05", cost: 1700 }, { date: "01-06", cost: 1000 }, { date: "01-07", cost: 1000 }, { date: "01-08", cost: 600 }, { date: "01-09", cost: 800 }, { date: "01-10", cost: 400 }, { date: "01-11", cost: 1600 }, { date: "01-12", cost: 1400 }, { date: "01-13", cost: 1100 }, { date: "01-14", cost: 1200 }, { date: "01-15", cost: 900 }, ] データセットからテーブルを作成 テーブル名の入力 フィールドを2つ追加する フィールド名:date タイプ:STRING フィールド名:cost タイプ:INTEGER ※DATE型もありますが、今回はSTRING型で入れます 上記の手順を行い、テーブルを作成 src > bq.ts import { BigQuery } from "@google-cloud/bigquery" import { initLogger } from "../logger/index" const { infoLogger, errorLogger } = initLogger("logger/index.ts") export const insertRowsAsStream = async () => { const bigQuery = new BigQuery() const costGraphData = [ { date: "01-01", cost: 1100 }, { date: "01-02", cost: 1200 }, { date: "01-03", cost: 1000 }, { date: "01-04", cost: 800 }, { date: "01-05", cost: 1700 }, { date: "01-06", cost: 1000 }, { date: "01-07", cost: 1000 }, { date: "01-08", cost: 600 }, { date: "01-09", cost: 800 }, { date: "01-10", cost: 400 }, { date: "01-11", cost: 1600 }, { date: "01-12", cost: 1400 }, { date: "01-13", cost: 1100 }, { date: "01-14", cost: 1200 }, { date: "01-15", cost: 900 }, ] try { infoLogger("Big Query にレコードのインサート開始") await bigQuery.dataset(データセット名).table(テーブル名).insert(costGraphData) infoLogger("Big Query にレコードのインサート完了") return Promise.resolve() } catch (error) { errorLogger("インサート失敗", { error }) return Promise.reject(error) } } ※もしデータを何かで取得した場合、costGraphDataの形に直してあげればBQにインサートができます。 app.ts import express from "express" import { insertRowsAsStream } from "./bq" const app = express() app.use(express.json()) app.get("/", insertRowsAsStream) const port = 8080 app.listen(port, () => { // eslint-disable-next-line no-console console.log(`Listening on port ${port}`) }) app.tsでbq.tsの関数を実行 最後に ターミナルでyarn devを実行 別ターミナルでcurl http://localhost:8080を叩く 1のターミナルでインサートが完了、GCPのBQテーブル(プレビュー)でデータが反映されていればOK! コードよりも権限やBQを設定する準備の方が難しく、時間がかかりました。 特に「サービスアカウントを作成」手順3番の権限周りが一番苦戦しました... 参考文献

Viewing all articles
Browse latest Browse all 9409

Trending Articles