最近MYSQL 5.7更新支持JSON语法 ,于是使用SQOOP同步了数据到大数据平台,准备使用IMPALA来做分析
但是发现IMPALA无法使用 JSON 用于where条件,只能用于 select, 不过 我未尝试使用 基于嵌套表去查询
作为替代方案: 可以使用SPARK SQL 基于 JSON查询 语法如下
SELECT
v1.name, v2.city, v2.state
FROM people
LATERAL VIEW json_tuple(people.jsonObject, 'name', 'address') v1
as name, address
LATERAL VIEW json_tuple(v1.address, 'city', 'state') v2
as city, state;
IMPALA JSON 插件 以下为安装流程与测试流程:
安装:基于UBUNTU 14.04
#下载cloudera源
wget https://archive.cloudera.com/cdh5/ubuntu/trusty/amd64/cdh/cloudera.list
#复制到sources中
cp -rf cloudera.list /etc/apt/sources.list.d/
#添加认证key
curl -s https://archive.cloudera.com/cdh5/ubuntu/trusty/amd64/cdh/archive.key| sudo apt-key add -
#更新APT库
apt-get update
#安装ImpalaUDF环境
apt-get install impala-udf-dev
#安装BOOST开发环境(IMPALA UDF依赖)
apt-get install libboost-dev
apt-get install cmake
#安装gcc,使用gcc --version查看 如果已经安装就不进行
#apt-get install build-essential
#apt-get install g++-4.4
#获取源码包
wget https://codeload.github.com/nazgul33/impala-get-json-object-udf/zip/master
#解压源码包,如果无法使用unzip,则进行安装
unzip master
#开始编译
cd impala-get-json-object-udf-master
cmake .
make
#上传udf编译文件到hdfs
hdfs dfs -mkdir /user/udf
hdfs dfs -put build/libjsonUdf.so /user/udf
#进入Impala
impala-shell
#执行过后会进入Imapa控制台,可以理解为mysql 查询界面
use default;
CREATE FUNCTION json_get_object (string, string) RETURNS string location '/user/udf/libjsonUdf.so' symbol='JsonGetObject';
#测试Json查询
SELECT json_get_object('{"name":"steven"}', '$.name');
#能够查询出steven即可