{"id":564,"date":"2017-10-23T18:30:27","date_gmt":"2017-10-23T09:30:27","guid":{"rendered":"http:\/\/kei0310.info\/?p=564"},"modified":"2017-10-23T18:44:37","modified_gmt":"2017-10-23T09:44:37","slug":"post-564","status":"publish","type":"post","link":"http:\/\/kei0310.info\/?p=564","title":{"rendered":"[Re:dash] BigQuery\u63a5\u7d9a\u3067\u65e5\u672c\u8a9e\u30bf\u30a4\u30c8\u30eb\u3092\u51fa\u3059\uff08v2.0.0\uff09"},"content":{"rendered":"<p>BigQuery\u306f\u73fe\u5728\u30de\u30eb\u30c1\u30d0\u30a4\u30c8\u3092\u542b\u3080SQL\u3092\u767a\u884c\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u306a\u3044\u3002<br \/>\n\uff082017\/10\/23\u73fe\u5728\uff09<\/p>\n<p>\u305d\u306e\u305f\u3081\u3001Re:dash\u3067\u65e5\u672c\u8a9e\u3092\u30ab\u30e9\u30e0\u540d\u306b\u3057\u305f\u8868\u3092\u3064\u304f\u308b\u3053\u3068\u304c\u3067\u304d\u306a\u3044\u3002<br \/>\n\u203bRe:dash\u306fSQL\u304b\u3089\u8fd4\u3063\u3066\u304d\u305f\u30ab\u30e9\u30e0\u540d\u3092\u3092\u306e\u307e\u307e\u8868\u306e\u30ab\u30e9\u30e0\u540d\u306b\u4f7f\u3046\u305f\u3081\u3002<\/p>\n<p>\u3053\u308c\u3067\u306f\u3001\u793e\u5185\u306e\u3048\u3089\u3044\u4eba\u306b\u898b\u3066\u3082\u3089\u3046\u7528\u306e\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u3068\u3057\u3066\u306f\u5fae\u5999\u3067\u3042\u308b\u3002<\/p>\n<p>\u305d\u306e\u305f\u3081\u3001\u81ea\u524d\u3067\u65e5\u672c\u8a9e\u5909\u63db\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u57cb\u3081\u8fbc\u3093\u3067\u307f\u308b\u3002<\/p>\n<p>\u3061\u306a\u307f\u306b\u3001\u30af\u30a8\u30ea\u7d50\u679c\u3092\u4fdd\u5b58\u3059\u308bquery_results\u30c6\u30fc\u30d6\u30eb\u306b\u305f\u305f\u304d\u8fbc\u3080\u30c7\u30fc\u30bf\u3092\u307e\u308b\u3054\u3068\u5909\u66f4<\/p>\n<h1>\u4fee\u6b63\u30b3\u30fc\u30c9(v2.0.0\u7528)<\/h1>\n<p>\/opt\/redash\/current\/redash\/tasks\/queries.py\u3092\u4fee\u6b63\u3059\u308b\u3002<\/p>\n<p>\u9069\u5f53\u306b\u66f8\u3044\u305f\u306e\u3067\u3001<\/p>\n<p>\u30ad\u30e3\u30e1\u30eb\u306a\u30e1\u30bd\u30c3\u30c9\u540d\u306f\u3044\u3084\u3060\u3068\u304b\u3001\u30d7\u30ed\u30b0\u30e9\u30e0\u4e2d\u306b\u30d5\u30eb\u30d1\u30b9\u306e\u30d5\u30a1\u30a4\u30eb\u540d\u66f8\u304d\u3084\u304c\u3063\u3066<\/p>\n<p>\u3068\u304b\u304c\u3042\u308c\u3070\u3001\u500b\u5225\u3067\u306a\u3093\u3068\u304b\u3057\u3066\u304f\u3060\u3055\u3044\u307e\u305b\u3002<\/p>\n<p>v2.0.0\u7528\u306e\u30b3\u30fc\u30c9\u3067\u3059\u304c\u30011.0.3\u3067\u3082\u7d30\u304b\u3044\u884c\u6570\u4ee5\u5916\u306f\u307e\u3063\u305f\u304f\u540c\u3058\u3067\u3059\u3002<\/p>\n<pre class=\"lang:python decode:true\" title=\"redash\/tasks\/queries.py\">1d0\r\n&lt; # -- coding: utf-8 --\r\n30,94d28\r\n&lt; def convertJpTitle(data, query_id):\r\n&lt;     ####################################################################\r\n&lt;     # \u7f6e\u63db\u5bfe\u8c61\u6587\u5b57\u5217\u3092\u53d6\u5f97\uff08\u30b3\u30fc\u30c9\u3092\u56fa\u3081\u305f\u3044\u306e\u3067static\u306b\u306f\u3057\u306a\u3044\uff09\r\n&lt;     ####################################################################\r\n&lt;     replacetargets = {}\r\n&lt;     for line in open('\/opt\/redash\/convert_title.csv', 'r'):\r\n&lt;         if line[0:1] == '#':\r\n&lt;             continue\r\n&lt;         list = line[:-1].split(',')\r\n&lt;         if len(list) &lt; 3:\r\n&lt;             continue\r\n&lt;         if query_id == int(list[0]):\r\n&lt;             replacetargets[list[1]] = list[2]\r\n&lt; \r\n&lt;     # columns\u8981\u7d20\u3092\u53d6\u5f97\r\n&lt;     data_columns = data[\"columns\"]\r\n&lt;     # \u5dee\u3057\u66ff\u3048\u7528columns\u8981\u7d20\u306e\u7bb1\r\n&lt;     data_columns_copy = []\r\n&lt;     # columns\u8981\u7d20\u3067\u30eb\u30fc\u30d7\r\n&lt;     for columns in data_columns:\r\n&lt;         # column 1\u8981\u7d20\u306e\u7bb1\uff08Dict\uff09\r\n&lt;         columns_copy = {}\r\n&lt;         # column\u306e\u8981\u7d20\u3092\u30eb\u30fc\u30d7\r\n&lt;         for k, v in columns.items():\r\n&lt;             # \"name\"\u8981\u7d20\u306e\u307f\u5dee\u3057\u66ff\u3048\u5bfe\u8c61\r\n&lt;             if(k == 'name'):\r\n&lt;                 # \u7f6e\u63db\u5bfe\u8c61\u306e\u691c\u7d22\r\n&lt;                 for target, rep in replacetargets.items():\r\n&lt;                     # \u7f6e\u63db\u5bfe\u8c61\u306b\u30de\u30c3\u30c1\u3057\u305f\u5834\u5408\u306e\u307f\u5dee\u3057\u66ff\u3048\r\n&lt;                     if v.upper() == target.upper():\r\n&lt;                         v = unicode(rep, 'utf-8')\r\n&lt;             # \u65b0column\u3092\u4fdd\u7ba1\r\n&lt;             columns_copy[k] = v\r\n&lt;         # \u65b0columns\u3092\u4fdd\u7ba1\r\n&lt;         data_columns_copy.append(columns_copy)\r\n&lt;     # \u5143\u306ecolumns\u8981\u7d20\u3092\u5dee\u3057\u66ff\u3048\r\n&lt;     data[\"columns\"] = data_columns_copy\r\n&lt; \r\n&lt;     ####################################################################\r\n&lt;     # \u30c7\u30fc\u30bf\u90e8\u306e\u5dee\u3057\u66ff\u3048\r\n&lt;     ####################################################################\r\n&lt;     # rows\u8981\u7d20\u3092\u53d6\u5f97\r\n&lt;     data_row = data[\"rows\"]\r\n&lt;     # \u5dee\u3057\u66ff\u3048\u7528rows\u8981\u7d20\u306e\u7bb1\r\n&lt;     data_row_copy = []\r\n&lt;     # rows\u8981\u7d20\u3067\u30eb\u30fc\u30d7\r\n&lt;     for row in data_row:\r\n&lt;         # row 1\u8981\u7d20\u306e\u7bb1\uff08Dict\uff09\r\n&lt;         row_copy = {}\r\n&lt;         # row\u306e\u8981\u7d20\u3092\u30eb\u30fc\u30d7\r\n&lt;         for k, v in row.items():\r\n&lt;             # \u7f6e\u63db\u5bfe\u8c61\u306e\u691c\u7d22\r\n&lt;             for target, rep in replacetargets.items():\r\n&lt;                 # \u7f6e\u63db\u5bfe\u8c61\u306b\u30de\u30c3\u30c1\u3057\u305f\u5834\u5408\u306e\u307f\u5dee\u3057\u66ff\u3048\r\n&lt;                 if k.upper() == target.upper():\r\n&lt;                     k = unicode(rep, 'utf-8');\r\n&lt;             # \u65b0row\u3092\u4fdd\u7ba1\r\n&lt;             row_copy[k] = v\r\n&lt;         # \u65b0rows\u3092\u4fdd\u7ba1\r\n&lt;         data_row_copy.append(row_copy)\r\n&lt;     # \u5143\u306erows\u8981\u7d20\u3092\u5dee\u3057\u66ff\u3048\r\n&lt;     data[\"rows\"] = data_row_copy\r\n&lt; \r\n&lt;     return json.dumps(data, cls=utils.JSONEncoder, ensure_ascii=False)\r\n&lt; \r\n527d460\r\n&lt;             data = convertJpTitle(json.loads(data), self.metadata['Query ID'])<\/pre>\n<h1>\u5909\u63db\u7528\u30c6\u30ad\u30b9\u30c8<\/h1>\n<p>\u4ee5\u4e0b\u306e\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3067\uff43\uff53\uff56\u30d5\u30a1\u30a4\u30eb\u3092\u3064\u304f\u3063\u3066\u3042\u3052\u308c\u3070\u3088\u3044\u3002<\/p>\n<p>\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u3092644\u3068\u304b\u306b\u3057\u3066\u3042\u3052\u308b\u306e\u3092\u5fd8\u308c\u306a\u3044\u3053\u3068\u3002<\/p>\n<p>\u30d1\u30b9\uff1a<\/p>\n<p>\/opt\/redash\/<\/p>\n<p>\u30d5\u30a1\u30a4\u30eb\u540d\uff1a<\/p>\n<p>convert_title.csv<\/p>\n<p>CSV\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\uff1a<\/p>\n<p>QueryID,\u82f1\u8a9e,\u65e5\u672c\u8a9e<br \/>\n(int,string,string)<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>BigQuery\u306f\u73fe\u5728\u30de\u30eb\u30c1\u30d0\u30a4\u30c8\u3092\u542b\u3080SQL\u3092\u767a\u884c\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u306a\u3044\u3002 \uff082017\/10\/23\u73fe\u5728\uff09 \u305d\u306e\u305f\u3081\u3001Re:dash\u3067\u65e5\u672c\u8a9e\u3092\u30ab\u30e9\u30e0\u540d\u306b\u3057\u305f\u8868\u3092\u3064\u304f\u308b\u3053\u3068\u304c\u3067\u304d\u306a\u3044\u3002 \u203bRe:dash\u306fSQL\u304b\u3089\u8fd4\u3063\u3066\u304d\u305f\u30ab [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[209],"tags":[207,206,208],"_links":{"self":[{"href":"http:\/\/kei0310.info\/index.php?rest_route=\/wp\/v2\/posts\/564"}],"collection":[{"href":"http:\/\/kei0310.info\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/kei0310.info\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/kei0310.info\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/kei0310.info\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=564"}],"version-history":[{"count":6,"href":"http:\/\/kei0310.info\/index.php?rest_route=\/wp\/v2\/posts\/564\/revisions"}],"predecessor-version":[{"id":570,"href":"http:\/\/kei0310.info\/index.php?rest_route=\/wp\/v2\/posts\/564\/revisions\/570"}],"wp:attachment":[{"href":"http:\/\/kei0310.info\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=564"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/kei0310.info\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=564"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/kei0310.info\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=564"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}