利用ケース
IPアドレスのピリオドをパースして、数値として扱いたいということがあるかもしれません。
Where句の範囲指定ができるようになり、計算が楽になったりします。
MySQLだと、
INET_ATON(“IPアドレス”)
という関数でそうした数値への変換できるみたいですね。
つまり、
INET_ATON("192.168.0.35") = 3232235555
Hiveには、そんな便利関数はないので、どうやって書くのかというと、下式で算出することになる。
192 * 256^3 + 168 * 256^2 + 0 * 256^1 + 34 * 256^0
サンプルデータ
host |
---|
48.204.59.23 |
サンプルクエリ
SELECT
(
host,
CAST(host_array[0] AS double) * 16777216 +
CAST(host_array[1] AS double) * 65536 +
CAST(host_array[2] AS double) * 256 +
CAST(host_array[3] AS double)
) AS host_num
FROM
(
SELECT
SPLIT(host, '\\.') AS host_array,
host
FROM www_access
) sep
クエリ説明
ここで言いたかったことは、HiveはJavaなので、'.'には、'\'が必要ということだけ。
次の段では、Array型のhost_arrayに対して、各要素を上式に当てはめて計算する。
SPLIT(host, '\\.') AS host_array,
結論
ピリオドにマッチさせる場合には、'\.'を使います。
以上。