Impala官网翻译04-开发Impala应用程序
开发Impala应用程序
Impala的核心开发语言是SQL。您也可以使用 Java 或其他语言通过许多商业智能工具使用的标准 JDBC 和 ODBC 接口与 Impala 进行交互。对于特殊类型的分析,您可以通过用C++或Java编写用户定义函数(UDF)来补充SQL内置函数。
Impala SQL方言概述
Impala SQL方言与Apache Hive组件(HiveQL)中使用的SQL语法高度兼容。因此,对于已经熟悉在 Hadoop 基础架构上运行 SQL 查询的用户来说,它是熟悉的。目前,Impala SQL支持HiveQL语句、数据类型和内置函数的子集。Impala还包括针对常见行业特性的额外内置函数,以简化从非Hadoop系统移植SQL的过程。
对于从传统数据库或数据仓库背景来Impala的用户来说,SQL方言的以下方面可能看起来很熟悉。
- SELECT语句包括熟悉的子句,如WHERE、GROUP BY、ORDER BY和WITH。你会发现一些熟悉的概念,如连接,用于处理字符串、数字和日期的内置函数,聚合函数,子查询,以及比较运算符,如IN()和BETWEEN。SELECT语句是符合SQL标准最重要的地方。
- 从数据仓库世界中,你会认识到分区表的概念。一个或多个列作为分区键,数据被物理地排列,以便在WHERE子句中引用分区键列的查询可以跳过不符合过滤条件的分区。例如,如果你有10年的数据,并使用WHERE year = 2015、WHERE year > 2010或WHERE year IN (2014,2015)这样的子句,Impala会跳过所有非匹配年份的数据,大大减少了查询的I/O量。
- 在Impala 1.2和更高版本中,UDF可以让你在SELECT和INSERT...SELECT语句中执行自定义比较和转换逻辑。
对于从传统数据库或数据仓库背景来到Impala的用户来说,SQL方言的以下几个方面可能需要你进行一些学习和练习,才能熟练掌握Hadoop环境。
- Impala SQL的重点是查询,包括的DML相对较少。没有UPDATE或DELETE语句。陈旧的数据通常会被丢弃(通过DROP TABLE或ALTER TABLE......DROP PARTITION语句)或替换(通过INSERT OVERWRITE语句)。
- 所有的数据创建都是由INSERT语句来完成的,它通常是通过从其他表查询来批量插入数据。有两种变化,一种是INSERT INTO,将数据追加到现有的数据上,另一种是INSERT OVERWRITE,将表或分区的全部内容替换掉(类似于TRUNCATE TABLE,然后再新建一个INSERT)。虽然有一个INSERT ... VALUES语法可以在一条语句中创建少量的值,但使用INSERT ... SELECT在一次操作中把大量的数据从一个表复制和转换到另一个表,效率要高得多。
- 你经常在一些其他环境中构建Impala表定义和数据文件,然后附加Impala,使其能够运行实时查询。同样的数据文件和表元数据是与Hadoop生态系统的其他组件共享的。特别是,Impala可以访问Hive创建的表或Hive插入的数据,Hive可以访问Impala生产的表和数据。许多其他Hadoop组件可以以Parquet和Avro等格式写入文件,然后可以由Impala进行查询。
- 由于 Hadoop 和 Impala 专注于对大型数据集的数据仓库式操作,因此 Impala SQL 包含了一些您可能在传统数据库系统的导入实用程序中找到的习惯用语。例如,您可以创建一个读取逗号分隔或制表符分隔的文本文件的表,在CREATE TABLE语句中指定分隔符。您可以创建读取现有数据文件的外部表,但不移动或转换它们。
- 由于Impala读取的大量数据可能并不完全整齐和可预测,因此它不需要对字符串数据类型进行长度限制。例如,您可以将数据库列定义为无限长的STRING,而不是CHAR(1)或VARCHAR(64)。虽然在Impala 2.0及以后的版本中,你也可以使用有长度限制的CHAR和VARCHAR类型)。
Impala编程接口概述
你可以通过以下方式连接并提交对Impala守护进程的请求。
- impala -shell交互式命令解释器。
- 基于 Hue 的 Web 用户界面。
- JDBC.
- ODBC。
通过这些选项,您可以在异构环境中使用Impala,在非Linux平台上运行JDBC或ODBC应用程序。您还可以将Impala与各种使用JDBC和ODBC接口的商业智能工具结合使用。
每个impalad守护进程,运行在集群中的不同节点上,监听几个端口的传入请求。来自impala-shell和Hue的请求通过同一个端口被路由到impalad守护进程。impalad守护进程分别监听JDBC和ODBC请求的端口。