0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Google CloudとローカルPCでファイルの送受信、クエリ実行する方法

Posted at

紹介

イオンリテール(株)デジタル戦略部データソリューションGの丸尾です。
当チームは実店舗出身&非エンジニア人材のみで構成された
システムの内製化チームとなっておりまして、
今回はその中で利用しているものを共有します。

概要

本投稿ではGoogle Cloud Platform(GCP)とローカルPCを、
特定のCLI(SDK)ツールを利用してファイルの送受信や、
Biqueryからのデータ抽出を行う際のコンフィグ設定を説明します。

実際のイントラネットを介した連携は、
詳細なシステムを組んだ方が良いですが、
POC検証やクイックに試したい場合は参考にして下さい。

投稿はいくつか分けて投稿しますので各リンク先をご参照下さい。

稼働環境

💻windowsマシン(windows10)
弊社の従業員向けPCが基本windowsなのでwindowsマシンの方法を記載
公式リファランスにはmac,linuxマシンでの導入方法が記載されています

対象者

①本投稿はGCP初心者の方
②Azcopyなど別クラウドのsdkを使っていた方
③ベンダーに特定ファイルの連携行わせたい方

想定シナリオ

①ローカルPC→GCloudStorageへのファイル転送
②GCloudStorage→ローカルPCへのファイル取得
③ローカルPC→Bigqueryへのファイルデータアップロードとクエリ稼働
④Bigquery→ローカルPCへのクエリ結果ファイル取得
※+おまけ:これらをRPAで回すバッチファイル作成

実施方法

Google Cloud CLI(SDK)を導入したらまず初めに以下を実行
※CLIの導入方法は➡こちら

実施内容に応じてコンフィグ設定を実行
※コンフィグ設定方法は➡こちら

①ローカルPC→GCloudStorageへのファイル転送

ローカルPCからGCS(Google Cloud Storage)にファイルをアップロードするには、gsutil cp コマンドを使用します。

コマンド例

gsutil cp ./local-file-path gs://your-bucket-name/destination-path/

./local-file-path:ローカルPC上のファイルパス。
gs://your-bucket-name/destination-path/:アップロード先のGCSバケットパス。

以下の様に実行すればファイルの一括送受信も可能

for %f in (source-dir-path\l0_*.csv) do (call gsutil cp %f "gs://your-bucket-name/%~nxf")

②GCloudStorage→ローカルPCへのファイル取得

GCSからローカルPCにファイルをダウンロードする場合も、gsutil cp コマンドを使用します。

gsutil cp gs://your-bucket-name/source-file-path ./local-destination-path

source-file-path:ダウンロード元のGCSファイルパス。
./local-destination-path:ローカルPC上の保存先パス。

以下の様に実行すればファイルの一括送受信も可能

for %f in (gs://your-bucket-name/l0_*.csv) do (call gsutil cp %f C:\Users\~~\source-dir-path\)

③ローカルPC→Bigqueryへのファイルデータアップロードとクエリ稼働

◆ファイルデータのアップロード

bq load --source_format=CSV dataset_name.table_name ./local-file-path ./schema.json

dataset_name:データセット名。
table_name:テーブル名。
./local-file-path:ローカルPC上のCSVファイルパス。
./schema.json:テーブルスキーマ定義ファイル。

◆クエリの実行

bq query --use_legacy_sql=false 'SELECT * FROM `project_id.dataset_name.table_name` WHERE column_name = "value"'

--use_legacy_sql=false:標準SQLを使用。
クエリ内のproject_id.dataset_name.table_nameはBigQueryのテーブル参照。

④Bigquery→ローカルPCへのクエリ結果ファイル取得

◆一度gcsを経由する方法
・クエリ結果をGCSにエクスポート

bq extract --destination_format CSV 'project_id.dataset_name.table_name' gs://your-bucket-name/destination-file.csv

・GCSからローカルPCにダウンロード

gsutil cp gs://your-bucket-name/destination-file.csv ./local-destination-path

◆直にbq結果をローカルPCにcsvで落とす方法

bq query --use_legacy_sql=false "SELECT DISTINCT columns1,columns2,columns3 FROM `project.dataset.table`" > C:\\~~~~\\test.csv

※+おまけ:これらをRPAで回すバッチファイル作成

@echo off
chcp 65001
cd /d "%~dp0"

gcloud config configurations activate my-config && gcloud config set account my-account@gmail.com &&for %%f in (C:\Users\~~\source-dir-path\l0_*.csv) do (call gsutil cp %%f "gs://your-bucket-name/%~nxf") && python main.py 
 
@REM エラーが発生する際はpauseのコメントアウトを外す
@REM pause

注意:cmdからの実行ですと「%f」で実行できていた部分を「%%f」に変更する必要があります。
   また、日本語のフォルダだと処理がややこしくなるので可能な限りフォルダ名は英語で統一するのが望ましいです

結果

GoogleCloudとローカルPCでファイルの送受信、クエリ実行ができる

batを少しいじって処理が成功した時だけ次の処理を実行したりすれば、以下のような実行ができますので、
業務改善に役立てていただければと思います

・クラウドから店舗リスト取得→ローカルで保持している情報と当て込むRPA処理→成功した時だけ取得したデータ付きでクラウドに返す
・ローカルで保持しているcsvをアップロード→クエリ1を起動→成功した時だけクエリ2を起動

※もちろん個人情報や会社情報の取り扱いは注意です

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?