
BigQuery上のテーブルで日本語カラムが使われていた際にLookMLの定義ができるか確認してみた
さがらです。
BigQuery上のテーブルで日本語カラムが使われていた際にLookMLの定義ができるか確認してみたので、その内容をまとめてみます。
事前準備
以下のクエリを実行して、日本語カラムを持つviewを定義します。※sagara-satoshi.citibike.trips
は、自分の検証用のテーブルです。
CREATE OR REPLACE VIEW `sagara-satoshi.citibike.trips_jp_view` AS
SELECT
tripduration AS `利用時間_秒`,
starttime AS `開始時刻`,
stoptime AS `終了時刻`,
start_station_id AS `開始ステーションID`,
start_station_name AS `開始ステーション名`,
start_station_latitude AS `開始ステーション緯度`,
start_station_longitude AS `開始ステーション経度`,
end_station_id AS `終了ステーションID`,
end_station_name AS `終了ステーション名`,
end_station_latitude AS `終了ステーション緯度`,
end_station_longitude AS `終了ステーション経度`,
bikeid AS `自転車ID`,
usertype AS `ユーザータイプ`,
birth_year AS `誕生年`,
gender AS `性別`,
customer_plan AS `顧客プラン`
FROM
`sagara-satoshi.citibike.trips`;
このviewに対してクエリをすると下図のように結果が返ってきます。
Lookerのviewの定義
先ほど作成したviewに対して、LookerのCreate View From Table
を使って、LookMLのviewが作成できるか確認してみます。
すると、下図のようなviewが生成されました。
sql:
は正しく入っていますが、各dimensionの名称について、自動で入力されていないためこのままではエラーとなります。開始ステーションID
などID
と半角英字が入っていたカラムは、id
とだけ自動でdimension名が入力されていますね。
このままではLooker上でviewとして利用することが出来ませんので、いくつか対策を試してみます。
対策1:dimension名に日本語カラム名をそのまま入力
まず、下図のようにdimension名に日本語カラム名をそのまま入力してみます。
しかしこれでは、Exploreでクエリを実行しようとしたときにエラーとなります。
対策2:dimension名の日本語カラム名をバッククォートで囲ってみる
次は、バッククォートで日本語カラム名を囲った場合にどうなるか見てみます。
しかし、Exploreでクエリを実行しようとしたときにエラーとなりました。
対策3:dimension名は半角英数字、labelで日本語カラム名を追加する
日本語カラム名をdimensionに直接記すのは難しいとわかったので、dimension名は半角英数字、labelで日本語カラム名を追加する方法で試してみます。
この場合は、うまくExploreでクエリが実行できました!
参考として、実際にうまくExploreでクエリが実行できた際のLookMLのview定義を以下に記載しておきます。
view: trips_jp_view {
sql_table_name: `sagara-satoshi.citibike.trips_jp_view` ;;
dimension: start_station_id {
label: "開始ステーションID"
primary_key: yes
type: number
sql: ${TABLE}.`開始ステーションID` ;;
}
dimension_group: starttime {
label: "開始時刻"
type: time
timeframes: [raw, time, date, week, month, quarter, year]
datatype: datetime
sql: ${TABLE}.`開始時刻` ;;
}
dimension: customer_plan {
label: "顧客プラン"
type: string
sql: ${TABLE}.`顧客プラン` ;;
}
dimension: start_station_name {
label: "開始ステーション名"
type: string
sql: ${TABLE}.`開始ステーション名` ;;
}
dimension: start_station_longitude {
label: "開始ステーション経度"
type: number
sql: ${TABLE}.`開始ステーション経度` ;;
}
dimension: start_station_latitude {
label: "開始ステーション緯度"
type: number
sql: ${TABLE}.`開始ステーション緯度` ;;
}
dimension: usertype {
label: "ユーザータイプ"
type: string
sql: ${TABLE}.`ユーザータイプ` ;;
}
dimension: end_station_name {
label: "終了ステーション名"
type: string
sql: ${TABLE}.`終了ステーション名` ;;
}
dimension: end_station_longitude {
label: "終了ステーション経度"
type: number
sql: ${TABLE}.`終了ステーション経度` ;;
}
dimension: end_station_latitude {
label: "終了ステーション緯度"
type: number
sql: ${TABLE}.`終了ステーション緯度` ;;
}
dimension: gender {
label: "性別"
type: string
sql: ${TABLE}.`性別` ;;
}
dimension: birth_year {
label: "誕生年"
type: number
sql: ${TABLE}.`誕生年` ;;
}
dimension_group: stoptime {
label: "終了時刻"
type: time
timeframes: [raw, time, date, week, month, quarter, year]
datatype: datetime
sql: ${TABLE}.`終了時刻` ;;
}
dimension: tripduration {
label: "利用時間_秒"
type: number
sql: ${TABLE}.`利用時間_秒` ;;
}
dimension: end_station_id {
label: "終了ステーションID"
type: number
sql: ${TABLE}.`終了ステーションID` ;;
}
dimension: bikeid {
label: "自転車ID"
type: number
sql: ${TABLE}.`自転車ID` ;;
}
measure: count {
type: count
}
}
最後に
BigQuery上のテーブルで日本語カラムが使われていた際にLookMLの定義ができるか確認してみました。
結果として、日本語カラム名をそのままdimensionの定義に入れることはできないため、dimension名は半角英数字にしてlabelで日本語表記が必要ということがわかりました。Lookerで利用する場合には参照先のテーブルのカラム名は半角英数字の方が、viewの定義がスムーズに行えますね!