GCSにcsvをアップロードしたときに、自動でBQに取り込むCloudFunctionsを整備したいと思っています。
使用言語はPythonです。
ふつうにアップロードさせると文字化けするので、UTF-8変換の工程を挟みたいと思います。
複数のファイルをアップして、(注文202103,注文202104,,もしくは会員情報20210501,といった具合)それぞれにテーブルを作らせようと思います。
Python初心者なので、コードを教えていただきたいです。
Python
1from google.cloud import bigquery 2import pandas as pd 3from google.cloud import storage 4import re 5 6 7def load_data(data, context): 8 9 10 11 # get file info 12 13 bucket_name = data['bucket'] 14 15 file_name = data['name'] 16 17 uri = 'gs://{}/{}'.format(bucket_name, file_name) 18 19 id = file_name.split(".") 20 match = re.search(r'([^/]+$)',id[0]) 21 22 tid = match.group() 23 24 if "注文" in tid: 25 table = tid.replace("注文","order_") 26 elif "会員情報" in tid: 27 table = tid.replace("会員情報","guest_") 28 29 df = pd.read_csv(uri,encoding = "shift-jis") 30 31 client = bigquery.Client('Test') 32 33 dataset_id = 'origin_data' 34 35 table_id = 'data' 36 37 bq = bigquery.Client() 38 39 dataset_ref = bq.dataset(dataset_id) 40 41 42 43 # Set Load Config 44 45 job_config = bigquery.LoadJobConfig() 46 47 job_config.write_disposition = 'WRITE_APPEND' 48 49 50 # Load data 51 52 load_job = client.load_table_from_dataframe( 53 54 df, table_id, job_config=job_config 55 56 ) 57 58 print("Starting job {}".format(load_job.job_id)) 59 60 load_job.result() 61 62 print("Job finished.")
このどこかで、if文を使って、会員情報csvと注文csvのそれぞれのカラム情報を指定しなければいけないと考えているのですが、あっていますか?
ほかに不足があれば教えてください。
よろしくお願いします。
あなたの回答
tips
プレビュー