[Re:dash] BigQuery接続で日本語タイトルを出す(v2.0.0)
BigQueryは現在マルチバイトを含むSQLを発行することができない。
(2017/10/23現在)
そのため、Re:dashで日本語をカラム名にした表をつくることができない。
※Re:dashはSQLから返ってきたカラム名ををのまま表のカラム名に使うため。
これでは、社内のえらい人に見てもらう用のダッシュボードとしては微妙である。
そのため、自前で日本語変換プログラムを埋め込んでみる。
ちなみに、クエリ結果を保存するquery_resultsテーブルにたたき込むデータをまるごと変更
修正コード(v2.0.0用)
/opt/redash/current/redash/tasks/queries.pyを修正する。
適当に書いたので、
キャメルなメソッド名はいやだとか、プログラム中にフルパスのファイル名書きやがって
とかがあれば、個別でなんとかしてくださいませ。
v2.0.0用のコードですが、1.0.3でも細かい行数以外はまったく同じです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
1d0 < # -- coding: utf-8 -- 30,94d28 < def convertJpTitle(data, query_id): < #################################################################### < # 置換対象文字列を取得(コードを固めたいのでstaticにはしない) < #################################################################### < replacetargets = {} < for line in open('/opt/redash/convert_title.csv', 'r'): < if line[0:1] == '#': < continue < list = line[:-1].split(',') < if len(list) < 3: < continue < if query_id == int(list[0]): < replacetargets[list[1]] = list[2] < < # columns要素を取得 < data_columns = data["columns"] < # 差し替え用columns要素の箱 < data_columns_copy = [] < # columns要素でループ < for columns in data_columns: < # column 1要素の箱(Dict) < columns_copy = {} < # columnの要素をループ < for k, v in columns.items(): < # "name"要素のみ差し替え対象 < if(k == 'name'): < # 置換対象の検索 < for target, rep in replacetargets.items(): < # 置換対象にマッチした場合のみ差し替え < if v.upper() == target.upper(): < v = unicode(rep, 'utf-8') < # 新columnを保管 < columns_copy[k] = v < # 新columnsを保管 < data_columns_copy.append(columns_copy) < # 元のcolumns要素を差し替え < data["columns"] = data_columns_copy < < #################################################################### < # データ部の差し替え < #################################################################### < # rows要素を取得 < data_row = data["rows"] < # 差し替え用rows要素の箱 < data_row_copy = [] < # rows要素でループ < for row in data_row: < # row 1要素の箱(Dict) < row_copy = {} < # rowの要素をループ < for k, v in row.items(): < # 置換対象の検索 < for target, rep in replacetargets.items(): < # 置換対象にマッチした場合のみ差し替え < if k.upper() == target.upper(): < k = unicode(rep, 'utf-8'); < # 新rowを保管 < row_copy[k] = v < # 新rowsを保管 < data_row_copy.append(row_copy) < # 元のrows要素を差し替え < data["rows"] = data_row_copy < < return json.dumps(data, cls=utils.JSONEncoder, ensure_ascii=False) < 527d460 < data = convertJpTitle(json.loads(data), self.metadata['Query ID']) |
変換用テキスト
以下のフォーマットでcsvファイルをつくってあげればよい。
パーミッションを644とかにしてあげるのを忘れないこと。
パス:
/opt/redash/
ファイル名:
convert_title.csv
CSVフォーマット:
QueryID,英語,日本語
(int,string,string)
スポンサードリンク
関連記事
記事はありませんでした