参考:Apache Impala Guide--Impala SQL Language Reference。

Impala使用和Hive一样的元数据存储,Impala可以访问使用原生Impala CREATE TABLE创建的表和Hive DDL创建的表;

Impala支持和HiveQL类似的DML;

支持TRUNCATE(至少在5.5及之前,不支持Kudu表)

UPDATE/UPSERT(5.10开始支持Kudu表)

Impala提供了很多和HiveQL等价的内置函数;

支持大多数子句如WITH, JOIN, AGGREGATE,DISTINCT, UNION ALL, ORDER BY, LIMIT(相关子查询除外);

支持和Hive一样的数据类型,如STRING, TINYINT,SMALLINT, INT, BIGINT, FLOAT, DOUBLE, BOOLEAN, STRING, TIMESTAMP(需要注意Kudu和Parquet文件格式的限制);

impala支持分区表、外部表;

impala支持绝大部分SQL 92语句;

查看各种上下文信息,可以使用SHOW XXX;如:

SHOW DATABASES [[LIKE] 'pattern']
SHOW SCHEMAS [[LIKE] 'pattern'] - an alias for SHOW DATABASES
SHOW TABLES [IN database_name] [[LIKE] 'pattern']
SHOW [AGGREGATE | ANALYTIC] FUNCTIONS [IN database_name] [[LIKE] 'pattern']
SHOW CREATE TABLE [database_name].table_name
SHOW CREATE VIEW [database_name].view_name
SHOW TABLE STATS [database_name.]table_name
SHOW COLUMN STATS [database_name.]table_name
SHOW [RANGE] PARTITIONS [database_name.]table_name
SHOW FILES IN [database_name.]table_name [PARTITION (key_col_expression [,
key_col_expression]]
SHOW ROLES
SHOW CURRENT ROLES
SHOW ROLE GRANT GROUP group_name
SHOW GRANT ROLE role_name

和RDBMS一样,支持统计信息收集COMPUTE [INCREMENTAL] STATS [db_name.]table_name(不同于Hive的ANALYZE TABLE需要分别为列和表收集统计信息,会一次性收集);增量统计信息收集适合于分区表(在ETL的最后应该收集统计信息)。下列语句可用来查看表的统计信息:

[quickstart.cloudera:] > show table stats t1;
Query: show table stats t1
+-------+--------+------+--------------+-------------------+--------+-------------------+--------------------------------------------------------+
| #Rows | #Files | Size | Bytes Cached | Cache Replication | Format | Incremental stats | Location |
+-------+--------+------+--------------+-------------------+--------+-------------------+--------------------------------------------------------+
| - | | 512B | NOT CACHED | NOT CACHED | TEXT | false | hdfs://quickstart.cloudera:8020/user/hive/warehouse/t1 |
+-------+--------+------+--------------+-------------------+--------+-------------------+--------------------------------------------------------+
Fetched row(s) in .17s
[quickstart.cloudera:] > show column stats t1;
Query: show column stats t1
+--------+------+------------------+--------+----------+----------+
| Column | Type | #Distinct Values | #Nulls | Max Size | Avg Size |
+--------+------+------------------+--------+----------+----------+
| x | INT | - | - | | |
+--------+------+------------------+--------+----------+----------+
Fetched row(s) in .11s

支持优化器提示(但是比较弱,要掌握优化器提示,必须先掌握执行计划)

有好几种格式(有点乱):

SELECT STRAIGHT_JOIN select_list FROM
join_left_hand_table
JOIN [{ /* +BROADCAST */ | /* +SHUFFLE */ }]
join_right_hand_table
remainder_of_query; INSERT insert_clauses
[{ /* +SHUFFLE */ | /* +NOSHUFFLE */ }]
[/* +CLUSTERED */]
SELECT remainder_of_query; SELECT select_list FROM
table_ref
/* +{SCHEDULE_CACHE_LOCAL | SCHEDULE_DISK_LOCAL | SCHEDULE_REMOTE}
[,RANDOM_REPLICA] */
remainder_of_query; -- 最近的优化器提示支持下列格式:
SELECT select_list FROM
join_left_hand_table
JOIN -- +BROADCAST|SHUFFLE
join_right_hand_table
remainder_of_query; INSERT insert_clauses
/* +SHUFFLE|NOSHUFFLE */
SELECT remainder_of_query;

有针对Impala执行本身的、也有针对控制HDFS调度的。

支持的各种hint可以参考Query Hints in Impala SELECT Statements

数据移动操作,LOAD DATA语句可以用来将HDFS目录的数据移动到Impala数据目录(目前不支持从本地文件系统移动,真正的移动、不是复制)可以直接映射到HDFS文件,那什么时候需要这个操作??(其实和外部表性质类似,只不过移动后文件为Impala管辖,否则为HDFS管辖)。

LOAD DATA INPATH 'hdfs_file_or_directory_path' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]

会话上下文设置:

它原先是一个impala-shell命令,后来被扩展为SQL语句,主要用于JDBC和ODBC API中。

不带任何参数可输出所有可设置的上下文选项列表,如下:

[quickstart.cloudera:21000] > set
> ;
Query options (defaults shown in []):
ABORT_ON_DEFAULT_LIMIT_EXCEEDED: []
ABORT_ON_ERROR: []
ALLOW_UNSUPPORTED_FORMATS: []
APPX_COUNT_DISTINCT: []
BATCH_SIZE: []
BUFFER_POOL_LIMIT: []
COMPRESSION_CODEC: [NONE]
DEBUG_ACTION: []
DECIMAL_V2: []
DEFAULT_JOIN_DISTRIBUTION_MODE: []
DEFAULT_ORDER_BY_LIMIT: [-1]
DEFAULT_SPILLABLE_BUFFER_SIZE: []
DISABLE_CACHED_READS: []
DISABLE_CODEGEN: []
DISABLE_CODEGEN_ROWS_THRESHOLD: []
DISABLE_OUTERMOST_TOPN: []
DISABLE_ROW_RUNTIME_FILTERING: []
DISABLE_STREAMING_PREAGGREGATIONS: []
DISABLE_UNSAFE_SPILLS: []
ENABLE_EXPR_REWRITES: []
EXEC_SINGLE_NODE_ROWS_THRESHOLD: []
EXPLAIN_LEVEL: []
HBASE_CACHE_BLOCKS: []
HBASE_CACHING: []
MAX_ERRORS: []
MAX_IO_BUFFERS: []
MAX_NUM_RUNTIME_FILTERS: []
MAX_ROW_SIZE: []
MAX_SCAN_RANGE_LENGTH: []
MEM_LIMIT: []
MIN_SPILLABLE_BUFFER_SIZE: []
MT_DOP: []
NUM_NODES: []
NUM_SCANNER_THREADS: []
OPTIMIZE_PARTITION_KEY_SCANS: []
PARQUET_ANNOTATE_STRINGS_UTF8: []
PARQUET_ARRAY_RESOLUTION: []
PARQUET_DICTIONARY_FILTERING: []
PARQUET_FALLBACK_SCHEMA_RESOLUTION: []
PARQUET_FILE_SIZE: []
PARQUET_READ_STATISTICS: []
PREFETCH_MODE: []
QUERY_TIMEOUT_S: []
REPLICA_PREFERENCE: []
REQUEST_POOL: []
RESERVATION_REQUEST_TIMEOUT: []
RM_INITIAL_MEM: []
RUNTIME_BLOOM_FILTER_SIZE: []
RUNTIME_FILTER_MAX_SIZE: []
RUNTIME_FILTER_MIN_SIZE: []
RUNTIME_FILTER_MODE: []
RUNTIME_FILTER_WAIT_TIME_MS: []
S3_SKIP_INSERT_STAGING: []
SCAN_NODE_CODEGEN_THRESHOLD: []
SCHEDULE_RANDOM_REPLICA: []
SCRATCH_LIMIT: [-1]
SEQ_COMPRESSION_MODE: []
STRICT_MODE: []
SUPPORT_START_OVER: [false]
SYNC_DDL: []
V_CPU_CORES: [] Shell Options
LIVE_PROGRESS: False
LIVE_SUMMARY: False Variables:
No variables defined.

作为命令行参数值不需要带引号,否则需要引号。所有可用的选项可以参考“Query Options for the SET Statement”。

Hadoop-Impala学习笔记之SQL参考的更多相关文章

  1. SQL反模式学习笔记21 SQL注入

    目标:编写SQL动态查询,防止SQL注入 通常所说的“SQL动态查询”是指将程序中的变量和基本SQL语句拼接成一个完整的查询语句. 反模式:将未经验证的输入作为代码执行 当向SQL查询的字符串中插入别 ...

  2. Hadoop入门学习笔记---part4

    紧接着<Hadoop入门学习笔记---part3>中的继续了解如何用java在程序中操作HDFS. 众所周知,对文件的操作无非是创建,查看,下载,删除.下面我们就开始应用java程序进行操 ...

  3. Hadoop入门学习笔记---part3

    2015年元旦,好好学习,天天向上.良好的开端是成功的一半,任何学习都不能中断,只有坚持才会出结果.继续学习Hadoop.冰冻三尺,非一日之寒! 经过Hadoop的伪分布集群环境的搭建,基本对Hado ...

  4. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

  5. Hadoop入门学习笔记---part2

    在<Hadoop入门学习笔记---part1>中感觉自己虽然总结的比较详细,但是始终感觉有点凌乱.不够系统化,不够简洁.经过自己的推敲和总结,现在在此处概括性的总结一下,认为在准备搭建ha ...

  6. Hadoop入门学习笔记---part1

    随着毕业设计的进行,大学四年正式进入尾声.任你玩四年的大学的最后一次作业最后在激烈的选题中尘埃落定.无论选择了怎样的选题,无论最后的结果是怎样的,对于大学里面的这最后一份作业,也希望自己能够尽心尽力, ...

  7. impala学习笔记

    impala学习笔记 -- 建库 CREATE DATABASE IF NOT EXISTS database_name; -- 在HDFS文件系统中创建数据库,需要指定要创建数据库的位置. CREA ...

  8. CUBRID学习笔记 41 sql语法之select

    cubrid的中sql查询语法 SELECT [ ] [{TO | INTO} ][FROM ] [WHERE ][GROUP BY {col_name | expr} [ASC | DESC], . ...

  9. Hadoop入门学习笔记(一)

    Week2 学习笔记 Hadoop核心组件 Hadoop HDFS(分布式文件存储系统):解决海量数据存储 Hadoop YARN(集群资源管理和任务调度框架):解决资源任务调度 Hadoop Map ...

随机推荐

  1. 报文分析2、IP头的结构

    IP头的结构 版本(4位) 头长度(4位) 服务类型(8位) 封包总长度(16位) 封包标识(16位) 标志(3位) 片断偏移地址(13位) 存活时间(8位) 协议(8位) 校验和(16位) 来源IP ...

  2. Ultimate Guide to WeChat for Business 2019

    Ultimate Guide to WeChat for Business 2019 By Iaroslav Kudritskiy (source :https://rocketbots.io/blo ...

  3. flask读书笔记

    学习flask的一个很好的网站:http://www.pythondoc.com/flask-mega-tutorial/helloworld.html ======================= ...

  4. 安卓点击home键重启

    主要原因是:每次启动Intent导致新创建Task的时候,该Task会记录导致其创建的Intent:而如果后续需要有一个新的与创建Intent完全一致(完全一致定位为:启动类,action.categ ...

  5. Fiddler抓取数据并分析(完整的配置教程)

    一.Fiddler现在的移动应用程序几乎都会和网络打交道,所以在分析一个 app 的时候,如果可以抓取出其发出的数据包,将对分析程序的流程和逻辑有极大的帮助.对于HTTP包来说,已经有很多种分析的方法 ...

  6. python函数带()与否

    一.不带括号时,调用的是这个函数本身 ,是整个函数体,是一个函数对象,不须等该函数执行完成二.带括号(参数或者无参),调用的是函数的执行结果,须等该函数执行完成的结果 进程和线程的target=fun ...

  7. 接口自动化框架(java)--5.通过testng.xml生成extentreport测试报告

    这套框架的报告是自己封装的 由于之前已经通过Extentreport插件实现了Testng的IReport接口,所以在testng.xml中使用listener标签并指向实现IReport接口的那个类 ...

  8. DLLHijack漏洞原理

    原理 当一个可执行文件运行时,windows加载器讲课执行模块映射到进程的地址空间中,加载器分析可执行模块的输入表,并设法找出任何需要的DLL,并将它们映射到进程的地址空间中. 由于输入表中只包含DL ...

  9. 030-IHttpModule

    MyHttpModule.cs public class MyHttpModule : IHttpModule { public void Dispose() { } public void Init ...

  10. textbox 未

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Tex ...