質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Google Cloud Platform

Google Cloud Platformは、Google社がクラウド上で提供しているサービス郡の総称です。エンドユーザー向けサービスと同様のインフラストラクチャーで運営されており、Webサイト開発から複雑なアプリ開発まで対応可能です。

Redash

Redash(Re:dash)は、ダッシュボードツールでOSSで提供されています。Python製やBigQuery/MySQL/PostgreSQLなどのデータストアに対応。クエリを設定することで結果をデータリストにしたり、グラフプロットすることができます。

Google Cloud Storage

Google Cloud Storageは、グーグル社が提供しているクラウドベースのデベロッパー・企業向けストレージサービス。可用性に優れ、APIで操作可能なため、データのアーカイブ保存やアプリケーションのコンテンツ提供など様々な用途に活用できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

0回答

1153閲覧

Cloud FunctionsからGCSへredashの抽出結果を定時アップロードしたい

f0_092

総合スコア0

Google Cloud Platform

Google Cloud Platformは、Google社がクラウド上で提供しているサービス郡の総称です。エンドユーザー向けサービスと同様のインフラストラクチャーで運営されており、Webサイト開発から複雑なアプリ開発まで対応可能です。

Redash

Redash(Re:dash)は、ダッシュボードツールでOSSで提供されています。Python製やBigQuery/MySQL/PostgreSQLなどのデータストアに対応。クエリを設定することで結果をデータリストにしたり、グラフプロットすることができます。

Google Cloud Storage

Google Cloud Storageは、グーグル社が提供しているクラウドベースのデベロッパー・企業向けストレージサービス。可用性に優れ、APIで操作可能なため、データのアーカイブ保存やアプリケーションのコンテンツ提供など様々な用途に活用できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2021/08/21 07:25

前提・実現したいこと

Google Cloud FunctionsからGCSへredashのクエリ抽出結果(redash_dynamic_queryを使用)をアップロードしたいのですが、上手く行きません。

最終的には、Google Cloud Functions(トリガー:pub/sub)でredashクエリ結果を抽出するのを、Cloud Schedulerで定期実行させたい形です。
アップロードの際に他に何か必要な事があるのか(設定で書き込み不可になっているなど)、それともそもそもコードがおかしいのか調べても情報がうまく得られず、悩んでおります。ご助言頂けないでしょうか。

該当のソースコード

main

1from redash_dynamic_query import RedashDynamicQuery 2import pandas as pd 3import json 4from google.cloud import storage as gcs 5 6def upload_blob(bucket_name, destination_blob_name, flg_index=False, flg_header=True): 7 redash = RedashDynamicQuery( 8 endpoint='https://redash.xxx.com/', 9 apikey='[api_key]', 10 max_wait=5000, 11 ) 12 query_id = 1200 13 bind = { 14 "start_date": '2021-06-01T00:00:00', 15 "end_date": '2021-06-07T23:59:59', 16 } 17 18 #redashのクエリ結果を取得 19 result = redash.query(query_id, bind) 20 res = result['query_result']['data'] 21 22 #jsonを整形 23 res_format_json = json.dumps(res, indent=4, separators=(',', ': ')) 24 25 #json形式でエラーが出るため、一時tmpへ退避 26 f = open('/tmp/'+'output.json', 'w') 27 t = 'output.json' 28 shutil.copy2(user_secret_file, f) 29 json.dump(res['rows'], t) 30 31 #変換したいjsonファイルを読込 32 df = pd.read_json("output.json") 33 """Uploads a file to the bucket.""" 34 # The ID of your GCS bucket 35 bucket_name = "[bucket_name]" 36 # The ID of your GCS object 37 destination_blob_name = "testQuery_2021_05_11.csv" 38 39 storage_client = storage.Client() 40 bucket = storage_client.bucket(bucket_name) 41 blob = bucket.blob(destination_blob_name) 42 blob.upload_from_string(df.to_csv(index=flg_index, header=flg_header, sep=","))

requirements

1redash-dynamic-query==1.0.4 2pandas 3google-cloud-storage==1.23.0 4

試したこと

・ローカルでquery_id = 1200のクエリがDataFrame形式で抽出出来たのは確認。
・アップロードの部分だけ試そうと以下のコードを実行したのですが、今度は「NameError: name 'gcs' is not defined」などが出てくる次第です。

import pandas as pd from google.cloud import storage as gcs def hello_pubsub(a,b): project_id = "My First Project" bucket_name = "[バケット名]" gcs_path = "[ファイルパス]" client = gcs.Client(project_id) bucket = client.get_bucket(bucket_name) # 格納するGCSパスを指定 blob = bucket.blob(gcs_path) df = pd.DataFrame([[1,2,3],[5,6,7]],columns=["x","y","z"]) # DataFrameをGCSにUpload blob.upload_from_string(df.to_csv(index=flg_index, header=flg_header, sep=",")) print( "File {} uploaded to {}.".format( source_file_name, destination_blob_name ) )

requirements

1pandas 2google-cloud-storage==1.23.0 3

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問