Hive安全配置 授权 可以通过在Hive目录属性文件中设置hive.security属性来启用Hive的授权检查。此属性必须是下列值之一:
属性值 说明 legacy(默认值) 授权检查很少执行,因此大多数操作都是允许的。使用配置属性hive.allow-drop-table、hive.allow-rename-table、hive.allow-add-column、hive.allow-drop-column和hive.allow-rename-column。 read-only 允许读数据或元数据的操作(如SELECT),不允许写数据或元数据的操作(如CREATE、INSERT或DELETE)。 file 授权检查使用Hive配置属性security.config-file指定的配置文件来执行。有关详细信息,请参阅基于文件的授权。 sql-standard 按照SQL标准,只要用户具有所需的权限,就可以执行这些操作。在这种模式下,openLooKeng基于Hive元存储中定义的权限对查询执行授权检查。若要更改这些权限,使用GRANT和REVOKE命令。有关详细信息,请参阅基于SQL标准的授权。 基于SQL标准的授权 当启用sql-standard安全时,openLooKeng与Hive一样执行基于SQL标准的授权。
由于openLooKeng的ROLE语法支持符合SQL标准,而Hive并不完全遵循SQL标准,因此存在以下限制和差异:
不支持CREATE ROLE role WITH ADMIN。 必须启用admin角色才能执行CREATE ROLE或DROP ROLE。 不支持GRANT role TO user GRANTED BY someone。 不支持REVOKE role FROM user GRANTED BY someone。 默认在新的用户会话中,用户除角色admin外的所有角色都启用。 通过执行SET ROLE role可以选择特定的角色。 SET ROLE ALL启用用户除admin以外的所有角色。 admin角色必须通过执行SET ROLE admin显式启用。 身份验证 /connector/hive默认的安全配置在连接Hadoop集群时不使用身份验证。无论哪个用户提交查询,所有查询都以运行openLooKeng进程的用户执行。
Hive连接器提供了额外的安全选项来支持配置为使用Kerberos的Hadoop集群。
访问HDFS (Hadoop Distributed File System)时,openLooKeng可以模拟运行查询的最终用户。这可以与HDFS权限和ACLs (Access Control Lists)一起使用,为数据提供进一步的安全性。
VDM连接器 在一些场景中,需要在同一个会话或视图中管理或访问多个数据源,同时,用户不需要关心数据的分布和来源。虚拟数据市场(VDM)连接器旨在将该特性引入openLooKeng。
VDM连接器支持:
创建、更新和删除组合多个目录的视图 通过视图访问真实数据 通过视图管理用户权限 记录每个用户使用VDM视图的情况 配置 VDM使用openLooKeng元存储存储其数据库信息。信息可以存储在HDFS或关系数据库中,这取决于openLooKeng元存储的实现。
因此必须先配置VDM元数据的存储方式。
下面是使用RDBMS作为VDM元数据的示例,创建etc/hetu-metastore.properties: # the type of metastore storage hetu.metastore.type=jdbc # jdbc connection address of database hetu.metastore.db.url=jdbc:mysql://.... # the user name of the database hetu.metastore.db.user=root # the password of database hetu.metastore.db.password=123456 下面是使用HDFS作为元数据存储的实例,创建etc/hetu-metastore.properties:
路径配置白名单:["/tmp”, “/opt/hetu”, “/opt/openlookeng”, “/etc/hetu”, “/etc/openlookeng”, 工作目录]
注意:避免选择根目录;路径不能包含../;如果配置了node.data_dir,那么当前工作目录为node.data_dir的父目录; 如果没有配置,那么当前工作目录为openlookeng server的目录
# the type of metastore storage hetu.metastore.type=hetufilesystem # profile name of hetu file system hetu.
比较函数和运算符 比较运算符 运算符 说明 < 小于 > 大于 <= 小于等于 >= 大于等于 = 等于 <> 不等于 != 不等于(该语法不标准,但很常见) 范围运算符:BETWEEN BETWEEN 运算符测试某个值是否处于指定的范围之内。其语法为 value BETWEEN min AND max:
SELECT 3 BETWEEN 2 AND 6; 上面显示的语句等效于以下语句:
SELECT 3 >= 2 AND 3 <= 6; 要测试某个值是否未处于指定的范围之内,应使用 NOT BETWEEN:
SELECT 3 NOT BETWEEN 2 AND 6; 上面显示的语句等效于以下语句:
条件表达式 CASE 标准 SQL CASE 表达式具有两种形式。“简单”形式从左向右搜索每个 value 表达式,直到找到一个等于 expression 的表达式:
CASE expression WHEN value THEN result [ WHEN ... ] [ ELSE result ] END 会返回匹配的 value 的 result。如果没有找到任何匹配项,那么如果存在 ELSE 子句,则返回该子句中的 result,否则返回 NULL。示例:
SELECT a, CASE a WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 'many' END “搜索”形式从左向右计算每个 boolean condition 的值,直到其中一个为 true 并返回匹配的 result:
CASE WHEN condition THEN result [ WHEN ... ] [ ELSE result ] END 如果没有任何条件为 true,那么如果存在 ELSE 子句,则返回该子句中的 result,否则返回 NULL。示例:
Lambda表达式 Lambda表达式使用->表示:
x -> x + 1 (x, y) -> x + y x -> regexp_like(x, 'a+') x -> x[1] / x[2] x -> IF(x > 0, x, -x) x -> COALESCE(x, 0) x -> CAST(x AS JSON) x -> x + TRY(1 / 0) 大多数SQL表达式都可以用在lambda体中,但有一些例外:
不支持子查询:x -> 2 + (SELECT 3) 不支持聚合:x -> max(y)
逻辑运算符 逻辑运算符 运算符 说明 示例 AND 如果两个值都为真,则为真。 a AND b OR 如果其中一个值为真,则为真。 a OR b NOT 如果值为假,则为真。 NOT a NULL对逻辑运算符的影响 如果表达式的一侧或两侧为NULL,则AND比较的结果可能是NULL。如果AND运算符至少一侧为FALSE,则表达式的计算结果为FALSE:
SELECT CAST(null AS boolean) AND true; -- null SELECT CAST(null AS boolean) AND false; -- false SELECT CAST(null AS boolean) AND CAST(null AS boolean); -- null 如果表达式的一侧或两侧为NULL,则OR比较的结果可能是NULL。如果OR运算符至少一侧为TRUE,则表达式的计算结果为TRUE:
SELECT CAST(null AS boolean) OR CAST(null AS boolean); -- null SELECT CAST(null AS boolean) OR false; -- null SELECT CAST(null AS boolean) OR true; -- true 下面的真值表展示了如何处理AND和OR中的NULL:
窗口函数 窗口函数对查询结果中的行执行计算。窗口函数在HAVING子句之后、ORDER BY子句之前运行。调用窗口函数需要使用特殊的语法(使用OVER子句来指定窗口)。一个窗口由三部分组成:
分区规范,它将输入行划分到不同的分区中。这与GROUP BY子句将行划分到不同的组中以用于聚合函数的方式类似。 排序规范,它确定窗口函数处理输入行的顺序。 窗口框架,它为给定的行指定要由函数处理的行滑动窗口。如果未指定框架,则默认使用RANGE UNBOUNDED PRECEDING,它与RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW相同。该框架包含从分区开头开始到当前行的最后一个对等点的所有行。 例如,以下查询按价格对每个售货员的订单进行排序:
SELECT orderkey, clerk, totalprice, rank() OVER (PARTITION BY clerk ORDER BY totalprice DESC) AS rnk FROM orders ORDER BY clerk, rnk 聚合函数 通过添加OVER子句,可以将所有aggregate用作窗口函数。会为当前行的窗口框架中的每个行计算聚合函数。
例如,以下查询为每个售货员生成按天滚动的订单价格总和:
SELECT clerk, orderdate, orderkey, totalprice, sum(totalprice) OVER (PARTITION BY clerk ORDER BY orderdate) AS rolling_sum FROM orders ORDER BY clerk, orderdate, orderkey 排序函数 cume_dist() -> bigint
BitmapIndex(位图索引) BitmapIndex使用Bitmap来进行早期行过滤,这可以帮助减少CPU和内存使用量。 这在高并发queries中是有益的。
BitmapIndex对于低基数(low cardinality, 即不同数据值的个数不多)的列效果很好, 因为index的大小随着不同值数量的增加而增加。 例如,gender之类的列将具有较小的尺寸。 而像id这样的列有很多不同的值,因此不推荐使用位图索引。
Bitmap是为每个不同的值构造一个位图,并记录包含该值的行号。 然后,B+Tree会被用来存储值与其位图之间的映射。 通过使用B+Tree,BitmapIndex可以支持使用运算符之类的范围query,例如 大于(>),小于(<),BETWEEN等。
注意: 在ORC算子下推启用时,BitmapIndex效果更好。可以通过设置hive.properties中的hive.orc-predicate-pushdown-enabled=true来启用, 或者在命令行中启用set session hive.orc_predicate_pushdown_enabled=true;。
参见Properties获得更多信息。
使用场景 注意:当前,启发式索引仅支持ORC存储格式的Hive数据源。
BitmapIndex用于过滤从ORC文件中读取的数据,且仅供worker节点使用。
选择适用的列 以高并发数运行的queries,并且在低基数的列上过滤predicates可以从BitmapIndex中得到好的效果。
例如,类似SELECT * FROM Employees WHERE gender='M' AND type='FULLTIME' AND salary>10000的query 可以在gender和type列上用BitmapIndex并且得到好的效果,因为数据在两列上都被过滤,并且两者的基数都很低。
支持的运算符 = Equality > Greater than >= Greater than or equal < Less than <= Less than or equal BETWEEN Between range IN IN set 支持的列类型 "integer", "smallint", "bigint", "tinyint", "varchar", "char", "boolean", "double", "real", "date", "decimal" 注意: 不支持采用其它数据类型来创建index。
BTreeIndex BTreeIndex使用二叉树数据结构存储。索引的大小随着索引列中不同值的个数而增加。
BTreeIndex利用B+Tree数据结构来允许在调度期间进行过滤。
BTreeIndex与BloomIndex相似,并且对于具有高基数的列非常适用。 但是,索引的大小可能会很大,因为索引的大小会随着数量的增加而增加 列中独特值的百分比增加。
B+Tree的建立构造使用独特列值作为键,并且可以在其中找到该列值的值。 为了减小索引的大小,将为这些值创建一部Dictionary,因此不需要将大型重复项存储多次。
与BloomIndex不同,BTreeIndex还可以使用以下运算符来支持范围查询 大于(>),小于(<),BETWEEN等。
使用场景 注意:当前,启发式索引仅支持ORC存储格式的Hive数据源。
BTreeIndex用于调度时的分片(Split)过滤,被coordinator节点使用。
选择适用的列 在具有高基数(即许多独特值)条件的列上具有过滤predicate的queries可以从BTreeIndex中达到好的效果。
例如,类似SELECT FROM FROM users WHERE phone>123456789的query 可以通过在phone列上使用BTreeIndex而达到好的效果,因为 列中的数据已被过滤,phone列的基数较高。
在BTreeIndex和BloomIndex索引之间选择时,需要考虑:
BloomIndex只支持=,而BTreeIndex提供范围查询 BloomIndex是不确定的,而BTreeIndex是确定的。因此BTreeIndex通常有更好的过滤性能 BTreeIndex比BloomIndex索引更大 支持的运算符 = Equality > Greater than >= Greater than or equal < Less than <= Less than or equal BETWEEN Between range IN IN set 支持的列类型 "integer", "smallint", "bigint", "tinyint", "varchar", "double", "real", "date", "decimal" 注意: 不支持采用其它数据类型来创建index。
用例 创建索引:
MinMaxIndex MinMaxIndex简单地记录数据的最大和最小值,占用空间极小。 因此,这一索引仅仅能被用于已经排序的数据列。
使用场景 注意:当前,启发式索引仅支持ORC存储格式的Hive数据源。
MinMaxIndex用于调度时的分片过滤,被coordinator节点使用。
选择适用的列 在对数据进行排序的列上具有过滤predicate的query可以从MinMaxIndex中得到好的效果。
例如,如果以下数据是根据age来排序的,那么一个像SELECT name from users WHERE age> 25 之类的query则可以因有效地在age上利用MinMaxIndex,而从中得到好的效果。
支持的运算符 = Equality > Greater than >= Greater than or equal < Less than <= Less than or equal 支持的列类型 "integer", "smallint", "bigint", "tinyint", "varchar", "char", "boolean", "double", "real", "date", "decimal" 注意: 不支持采用其它数据类型来创建index。
用例 创建索引:
create index idx using minmax on hive.hindex.users (age); create index idx using minmax on hive.hindex.users (age) where regionkey=1; create index idx using minmax on hive.
openLooKeng验证器 openLooKeng验证器可用于针对另一个数据库(如MySQL)测试openLooKeng,或针对彼此测试两个openLooKeng集群。在开发openLooKeng时,我们使用它来针对先前的发行版持续测试主干。使用下表创建MySQL数据库,并通过你想要运行的查询加载该数据库:
CREATE TABLE verifier_queries( id INT NOT NULL AUTO_INCREMENT, suite VARCHAR(256) NOT NULL, name VARCHAR(256), test_catalog VARCHAR(256) NOT NULL, test_schema VARCHAR(256) NOT NULL, test_prequeries TEXT, test_query TEXT NOT NULL, test_postqueries TEXT, test_username VARCHAR(256) NOT NULL default 'verifier-test', test_password VARCHAR(256), control_catalog VARCHAR(256) NOT NULL, control_schema VARCHAR(256) NOT NULL, control_prequeries TEXT, control_query TEXT NOT NULL, control_postqueries TEXT, control_username VARCHAR(256) NOT NULL default 'verifier-test', control_password VARCHAR(256), session_properties_json VARCHAR(2048), PRIMARY KEY (id) ); 接下来,创建一个属性文件来配置验证器:
从Hive迁移 openLooKeng使用ANSI SQL语法和语义,而Hive使用一种类似SQL的语言HiveQL。
使用下标代替UDF访问数组的动态索引 SQL中的下标运算符支持全表达式,而Hive只支持常量。因此,你可以如下编写查询:
SELECT my_array[CARDINALITY(my_array)] as last_element FROM ... 避免越界访问数组 越界访问数组元素将导致异常。你可以使用if通过以下方式避免此情况:
SELECT IF(CARDINALITY(my_array) >= 3, my_array[3], NULL) FROM ... 对数组使用ANSI SQL语法 数组的索引从1开始,而不是从0开始:
SELECT my_array[1] AS first_element FROM ... 使用ANSI语法构造数组:
SELECT ARRAY[1, 2, 3] AS my_array 对标识符和字符串使用ANSI SQL语法 字符串用单引号分隔,标识符用双引号而不是反引号分隔:
SELECT name AS "User Name" FROM "7day_active" WHERE name = 'foo' 引用以数字开头的标识符 以数字开头的标识符在ANSI SQL中是不合法的,必须使用双引号括起来:
SELECT * FROM "7day_active" 使用标准字符串连接运算符 使用ANSI SQL字符串连接运算符:
SELECT a || b || c FROM ... 使用CAST目标的标准类型 CAST目标支持以下标准类型:
表统计 openLooKeng支持基于统计信息的查询优化。为了让查询利用这些优化,openLooKeng必须提供该查询中表的统计信息。
表统计信息由连接器提供给查询计划器。目前仅Hive连接器支持统计。
表格布局 统计信息通过表布局向查询计划器呈现。一个表布局表示表数据的子集,并包含有关该数据的组织属性(例如排序顺序和分桶)的信息。
可用于表的表布局的数量和表布局的详细信息是每个连接器特有的。以Hive连接器为例:
非分区表只有一个表布局,表示表中的所有数据 分区表拥有一系列表布局。每一组要扫描的分区代表一个表布局。openLooKeng将根据查询中的筛选谓词,尝试选择由最少数量的分区组成的表布局。 可用统计 openLooKeng提供以下统计数据:
对于表: row count:表示表布局的总行数。 对于表格中的每一列: data size:表示需要读取的数据大小 nulls fraction:表示空值的部分 distinct value count:表示独特值的个数。 low value:表示列中最小值。 high value:表示列中最大值 可用于特定查询的统计集取决于所使用的连接器,也因表甚至表布局而异。例如,Hive连接器目前不提供数据大小的统计信息。
可以通过openLooKeng SQL接口使用SHOW STATS命令查询表统计信息。Hive连接器,请参考Hive连接器文档了解如何更新表的统计信息。
表下推优化器规则 openLooKeng支持Table下推优化器规则,以改善符合条件的查询延迟。
用户须执行以下命令为SQL查询中的所有表生成stats,以便根据表的大小对连接源重新排序-
ANALYZE tableName; User Hint Comment-
用户还可以添加以下格式的特别注释,通过指定表名及其不重复(主键)列名,来利用表下推规则的好处。
/* #distinct@ table1 = col1, col2, ... #*/ 此提示是可选的,因为如果表有相关统计信息, openLookeng可以标识所有不同的列。
以下查询(由TPC-H Benchmark的Query 17修改而来)就是一个满足条件的查询,将外层表推入子查询,从而提升整体查询时延。
Original Query-
SELECT Sum(lineitem.extendedprice) / 7.0 AS avg_yearly FROM lineitem, part, ( SELECT 0.2 * Avg(lineitem.quantity) AS s_avg, lineitem.partkey AS s_partkey FROM lineitem GROUP BY lineitem.partkey ) WHERE part.partkey = lineitem.partkey AND part.brand = 'Brand#43' AND part.container = 'LG PACK' AND part.partkey = s_partkey AND lineitem.quantity < s_avg /* #distinct@ part = partkey #*/; 在上述查询中,表part是相关的外部查询表,以partkey为唯一列,与表lineitem连接。下面给出一个等价的重写后的查询语句,将part表推入到子查询。
内部通信安全 openLooKeng集群可以通过配置使用安全通信。 可使用SSL/TLS确保openLooKeng节点间的通信安全。
内部SSL/TLS配置 在config.properties文件中进行SSL/TLS配置。使用相同的属性对工作(worker)节点和协调(coordinator)节点上的SSL/TLS进行配置。集群中每个节点都需要进行配置。未配置SSL/TLS或配置错误的节点将无法与集群中的其他节点进行通信。
为openLooKeng内部通信启用SSL/TLS功能,执行以下步骤:
禁用HTTP端点。
http-server.http.enabled=false 警告
可以在不禁用HTTP的情况下,开启HTTPS。但在大多数情况下,这会有安全风险。 如果您确定要使用此配置,则应考虑使用防火墙来确保HTTP端点不被非法的主机访问。
配置集群使用集群节点的FQDN(全量域名)进行通信。可通过以下两种方式实现:
如果DNS服务配置正常,可以让节点使用从系统配置获得的主机名(hostname --fqdn)向协调节点介绍自己。
node.internal-address-source=FQDN 手动指定每个节点的完全限定主机名。每台主机的主机名应该不同。主机应该在同一个域中,以便创建正确的SSL/TLS证书。如:coordinator.example.com, worker1.example.com, worker2.example.com.
node.internal-address=<node fqdn> 生成Java 密钥库文件。每个openLooKeng节点必须能够连接到同一集群中的任何其他节点。可以使用每台主机的完全限定主机名为每个节点创建唯一的证书,创建包含所有主机的所有公钥的密钥库,并为客户端指定密钥库(见下面的步骤8)。在大多数情况下,在证书中使用通配符会更简单,如下所示。
keytool -genkeypair -alias openLooKeng -keyalg RSA -keystore keystore.jks -keysize 2048 Enter keystore password: Re-enter new password: What is your first and last name? [Unknown]: *.example.com What is the name of your organizational unit? [Unknown]: What is the name of your organization?
Java密钥库和信任库 TLS的Java密钥库文件 使用Kerberos和LDAP身份验证时,必须通过HTTPS访问openLooKeng协调节点。openLooKeng协调节点使用JavaKeystore<server_java_keystore>文件进行TLS配置。这些密钥使用keytool生成,并存储在Java 密钥库文件中,供openLooKeng协调节点使用。
keytool命令行中的别名应与openLooKeng协调节点将要使用的主体匹配。系统将提示您输入姓名。使用将要在证书中使用的Common Name。在这种情况下,它应该是openLooKeng协调节点的非限定主机名。在下面的例子中,在确认信息正确的提示中可以看到这一点:
keytool -genkeypair -alias openlookeng -keyalg RSA -keystore keystore.jks Enter keystore password: Re-enter new password: What is your first and last name? [Unknown]: openlookeng-coordinator.example.com What is the name of your organizational unit? [Unknown]: What is the name of your organization? [Unknown]: What is the name of your City or Locality? [Unknown]: What is the name of your State or Province? [Unknown]: What is the two-letter country code for this unit?
ALTER SCHEMA 摘要 ALTER {SCHEMA|DATABASE} name RENAME TO new_name 说明 更改现有模式的定义。
示例 将模式 web 重命名为 traffic:
ALTER SCHEMA web RENAME TO traffic ALTER DATABASE web RENAME TO traffic 限制 某些连接器(如 Hive 连接器)不支持重命名模式。有关更多详细信息,请参见连接器文档。
另请参见 CREATE SCHEMA
ALTER TABLE 摘要 ALTER TABLE name RENAME TO new_name ALTER TABLE name ADD COLUMN column_name data_type [ COMMENT comment ] [ WITH ( property_name = expression [, ...] ) ] ALTER TABLE name DROP COLUMN column_name ALTER TABLE name RENAME COLUMN column_name TO new_column_name 说明 更改现有表的定义。
示例 将表 users 重命名为 people:
ALTER TABLE users RENAME TO people; 在 users 表中添加 zip 列:
ALTER TABLE users ADD COLUMN zip varchar; 从 users 表中删除 zip 列:
COMMENT 摘要 COMMENT ON TABLE name IS 'comments' 说明 设置表的注释。可以通过将注释设置为 NULL 来删除注释。
示例 将 users 表的注释更改为 master table:
COMMENT ON TABLE users IS 'master table';
CREATE ROLE 摘要 CREATE ROLE role_name [ WITH ADMIN ( user | USER user | ROLE role | CURRENT_USER | CURRENT_ROLE ) ] 说明 CREATE ROLE 在当前目录中创建指定的角色。
如果使用可选的 WITH ADMIN 子句,则在创建角色时使指定的用户成为角色管理员。角色管理员具有删除或授予角色的权限。如果未指定可选的 WITH ADMIN 子句,在创建角色时使当前用户成为角色管理员。
示例 创建角色 admin:
CREATE ROLE admin; 创建角色 moderator 并使 bob 成为角色管理员:
CREATE ROLE moderator WITH ADMIN USER bob; 限制 某些连接器不支持角色管理。有关更多详细信息,请参见连接器文档。
另请参见 DROP ROLE、SET ROLE、GRANT ROLES、REVOKE ROLES
CREATE SCHEMA 摘要 CREATE {SCHEMA|DATABASE} [ IF NOT EXISTS ] schema_name [ WITH ( property_name = expression [, ...] ) ] 说明 创建一个空模式。模式是保存表、视图和其他数据库对象的容器。
如果使用可选的 IF NOT EXISTS 子句,则在模式已存在时禁止显示错误。
可以使用可选的 WITH 子句来设置创建的模式的属性。要列出所有可用的模式属性,请运行以下查询:
SELECT * FROM system.metadata.schema_properties 示例 在当前目录中创建模式 web:
CREATE SCHEMA web CREATE DATABASE web 在 hive 目录中创建模式 sales:
CREATE SCHEMA hive.sales 如果模式 traffic 尚不存在,则创建该模式:
CREATE SCHEMA IF NOT EXISTS traffic 另请参见 ALTER SCHEMA、DROP SCHEMA
CREATE TABLE AS 摘要 CREATE TABLE [ IF NOT EXISTS ] table_name [ ( column_alias, ... ) ] [ COMMENT table_comment ] [ WITH ( property_name = expression [, ...] ) ] AS query [ WITH [ NO ] DATA ] 说明 创建一个包含 SELECT 查询结果的表。使用 CREATE TABLE 可以创建空表。
如果使用可选的 IF NOT EXISTS 子句,则在表已存在时禁止显示错误。
可以使用可选的 WITH 子句来设置创建的表的属性。要列出所有可用的表属性,请运行以下查询:
SELECT * FROM system.metadata.table_properties 示例 使用查询结果和给定的列名创建表 orders_column_aliased:
CREATE TABLE orders_column_aliased (order_date, total_price) AS SELECT orderdate, totalprice FROM orders 创建对 orders 进行汇总的表 orders_by_date:
DELETE 摘要 DELETE FROM table_name [ WHERE condition ] 说明 删除表中的行。如果指定了 WHERE 子句,则仅删除匹配的行。否则,将删除表中的所有行。
示例 删除所有空运行项目:
DELETE FROM lineitem WHERE shipmode = 'AIR'; 删除低优先级订单的所有行项目:
DELETE FROM lineitem WHERE orderkey IN (SELECT orderkey FROM orders WHERE priority = 'LOW'); 删除所有订单:
DELETE FROM orders; 限制 某些连接器对 DELETE 的支持有限或不支持该语句。
例如,对于 Hive 连接器,事务表和非事务表的行为是不同的。
对于事务表,可以通过 WHERE 条件来删除任何行。不过,对于非事务表,仅当 WHERE 子句匹配整个分区时才支持 DELETE。
有关更多详细信息,请参见连接器文档。
DESCRIBE INPUT 摘要 DESCRIBE INPUT statement_name 说明 列出预编译语句的输入参数以及每个参数的位置和类型。无法确定的参数类型将显示为 unknown。
示例 预编译并描述一个具有三个参数的查询:
PREPARE my_select1 FROM SELECT ? FROM nation WHERE regionkey = ? AND name < ?; DESCRIBE INPUT my_select1; Position | Type -------------------- 0 | unknown 1 | bigint 2 | varchar (3 rows) 预编译并描述一个不具有参数的查询:
PREPARE my_select2 FROM SELECT * FROM nation; DESCRIBE INPUT my_select2; Position | Type ----------------- (0 rows) 另请参见 PREPARE
DESCRIBE 摘要 DESCRIBE table_name 说明 DESCRIBE 是 SHOW COLUMNS 的别名。
DROP CACHE 摘要 DROP CACHE table WHERE condition; 说明 DROP CACHE仅从协调节点中删除table的缓存元数据。工作节点的缓存数据会根据过期时间或者缓存大小而被自动清理。但当再次遇到重复的分片时,协调节点将不会把它分配到带缓存的工作节点。
示例 DROP CACHE 命令支持通过匹配条件字符串删除特定的缓存记录。例如,如果 SHOW CACHE 命令显示有一条名为 sale_id = 24 的缓存记录存储于 sales 表格下,那么运行下面的命令会将其删除且不影响其他的缓存记录。
DROP CACHE sales WHERE sale_id = 24; 或者删除 sales 表格下存储的所有缓存记录。
DROP CACHE sales; 限制 目前只有Hive连接器支持此功能。 有关更多详细信息,请参见连接器文档。
另请参见 CACHE TABLE、SHOW CACHE
DROP ROLE 摘要 DROP ROLE role_name 说明 DROP ROLE 删除当前目录中的指定角色。
为了使 DROP ROLE 语句成功执行,执行该语句的用户应拥有给定角色的管理员权限。
示例 删除角色 admin:
DROP ROLE admin; 限制 某些连接器不支持角色管理。有关更多详细信息,请参见连接器文档。
另请参见 CREATE ROLE、SET ROLE、GRANT ROLES、REVOKE ROLES
DROP SCHEMA 摘要 DROP {SCHEMA|DATABASE} [ IF EXISTS ] schema_name [{CASCADE | RESTRICT}] 说明 删除一个现有的模式。该模式必须为空。
如果使用可选的 IF EXISTS 子句,则在该模式不存在时禁止显示错误。
示例 删除模式 web:
DROP SCHEMA web DROP DATABASE web 如果模式 sales 存在,则删除该模式:
DROP TABLE IF EXISTS sales 限制 从功能上而言,尚不支持 CASCADE 和 RESTRICT。
另请参见 ALTER SCHEMA、CREATE SCHEMA
DROP TABLE 摘要 DROP TABLE [ IF EXISTS ] table_name 说明 删除一个现有的表。
如果使用可选的 IF EXISTS 子句,则在该表不存在时禁止显示错误。
示例 删除表 orders_by_date:
DROP TABLE orders_by_date 如果表 orders_by_date 存在,则删除该表:
DROP TABLE IF EXISTS orders_by_date 另请参见 ALTER TABLE、CREATE TABLE
DROP VIEW 摘要 DROP VIEW [ IF EXISTS ] view_name 说明 删除一个现有的视图。
如果使用可选的 IF EXISTS 子句,则在该视图不存在时禁止显示错误。
示例 删除视图 orders_by_date:
DROP VIEW orders_by_date 如果视图 orders_by_date 存在,则删除该视图:
DROP VIEW IF EXISTS orders_by_date 另请参见 CREATE VIEW
EXECUTE 摘要 EXECUTE statement_name [ USING parameter1 [ , parameter2, ... ] ] 说明 执行名称为 statement_name 的预编译语句。在 USING 子句中定义参数值。
示例 预编译并执行一个不具有参数的查询:
PREPARE my_select1 FROM SELECT name FROM nation; EXECUTE my_select1; 预编译并执行一个具有两个参数的查询:
PREPARE my_select2 FROM SELECT name FROM nation WHERE regionkey = ? and nationkey < ?; EXECUTE my_select2 USING 1, 3; 这等效于:
SELECT name FROM nation WHERE regionkey = 1 AND nationkey < 3; 另请参见 PREPARE
EXPLAIN ANALYZE 摘要 EXPLAIN ANALYZE [VERBOSE] statement 说明 执行语句并显示语句的分布式执行计划以及每个操作的开销。
VERBOSE 选项可提供更详细的信息和具体的统计数据;了解这些信息可能需要了解 openLooKeng 内部细节和实现细节。
注意
统计数据可能不完全准确,尤其是对于快速完成的查询。
示例 在下面的示例中,您可以看到每个阶段消耗的 CPU 时间,以及该阶段中每个计划节点的相对开销。请注意,计划节点的相对开销基于挂钟时间,挂钟时间可能与 CPU 时间相关,也可能与之不相关。对于每个计划节点,您都可以看到一些额外的统计数据(例如每个节点实例的平均输入以及相关计划节点的平均哈希冲突数)。当您希望检测查询的数据异常(偏斜、异常哈希冲突)时,这些统计数据很有用。
lk:sf1> EXPLAIN ANALYZE SELECT count(*), clerk FROM orders WHERE orderdate > date '1995-01-01' GROUP BY clerk; Query Plan ----------------------------------------------------------------------------------------------- Fragment 1 [HASH] Cost: CPU 88.57ms, Input: 4000 rows (148.44kB), Output: 1000 rows (28.32kB) Output layout: [count, clerk] Output partitioning: SINGLE [] - Project[] => [count:bigint, clerk:varchar(15)] Cost: 26.24%, Input: 1000 rows (37.
GRANT ROLES 摘要 GRANT role [, ...] TO ( user | USER user | ROLE role) [, ...] [ GRANTED BY ( user | USER user | ROLE role | CURRENT_USER | CURRENT_ROLE ) ] [ WITH ADMIN OPTION ] 说明 将指定的角色授给当前目录中的指定主体。
如果指定了 WITH ADMIN OPTION 子句,则可以使用 GRANT 选项将角色授给用户。
为了使针对角色的 GRANT 语句成功执行,执行该语句的用户应具有管理员角色或者应对于给定的角色拥有 GRANT 选项。
可选的 GRANTED BY 子句可使指定的主体作为授予方来授给角色。如果未指定 GRANTED BY 子句,则当前用户作为授予方来授给角色。
示例 将角色 bar 授给用户 foo:
GRANT bar TO USER foo; 将角色 bar 和 foo 授给用户 baz 和角色 qux 并使其具有管理员选项:
GRANT 摘要 GRANT ( privilege [, ...] | ( ALL PRIVILEGES ) ) ON [ TABLE ] table_name TO ( user | USER user | ROLE role ) [ WITH GRANT OPTION ] 说明 将指定的权限授给指定的被授权者。
指定 ALL PRIVILEGES 可以授予 DELETE、INSERT 和 SELECT 权限。
指定 ROLE PUBLIC 可以将权限授给 PUBLIC 角色,从而将权限授给所有用户。
通过使用可选的 WITH GRANT OPTION 子句,可以允许被授权者将同样的权限授给其他用户。
为了使 GRANT 语句成功执行,执行该语句的用户应拥有指定的权限并且对于这些权限拥有 GRANT OPTION。
示例 将对表 orders 的 INSERT 和 SELECT 权限授给用户 alice:
GRANT INSERT, SELECT ON orders TO alice; 将对表 nation 的 SELECT 权限授给用户 alice,此外允许 alice 将 SELECT 权限授给其他用户:
JMX 摘要 SELECT * FROM jmx.current."table_name"; 说明 所有的JMX数据都以表格的形式存储在jmx.current中,其中table_name必须用引号注释。
用户需要先找到存储 JMX 数据的表格,然后使用SELECT语句进行查看。
示例 查看 row data cache 统计数据:
SELECT * FROM jmx.current."io.prestosql.orc:name=hive,type=rowdatacachestatslister"; 查看 bloom filter cache 统计数据:
SELECT * FROM jmx.current."io.prestosql.orc:name=hive,type=bloomfiltercachestatslister";
PREPARE 摘要 PREPARE statement_name FROM statement 说明 准备一条语句,以便在以后执行。准备的语句是保存在具有给定名称的会话中的查询。该语句可以包含参数以代替字面量,这些参数在执行时被替换为实际的值。参数由问号表示。
示例 准备一个 select 查询:
PREPARE my_select1 FROM SELECT * FROM nation; 准备一个包含参数的 select 查询。将与 regionkey 和 nationkey 进行比较的值将通过 execute 语句进行填充:
PREPARE my_select2 FROM SELECT name FROM nation WHERE regionkey = ? AND nationkey < ?; 准备一个 insert 查询:
PREPARE my_insert FROM INSERT INTO cities VALUES (1, 'San Francisco'); 另请参见 EXECUTE、DEALLOCATE PREPARE、DESCRIBE INPUT、DESCRIBE OUTPUT
REFRESH META CACHE 使用方式 REFRESH META CACHE [FOR CATALOG] 说明 REFRESH META CACHE用于刷新当前目录连接器元数据缓存。REFRESH META CACHE FOR CATALOG用于刷新指定目录连接器元数据缓存。
示例 刷新当前目录连接器元数据缓存
REFRESH META CACHE 刷新指定目录连接器元存储缓存
REFRESH META CACHE FOR catalog 限制 目前仅Hive连接器支持该功能。
REVOKE ROLES 摘要 REVOKE [ ADMIN OPTION FOR ] role [, ...] FROM ( user | USER user | ROLE role) [, ...] [ GRANTED BY ( user | USER user | ROLE role | CURRENT_USER | CURRENT_ROLE ) ] 说明 从当前目录中的指定主体回收指定的角色。
如果指定了 ADMIN OPTION FOR 子句,则回收 GRANT 权限,而不是回收角色。
为了使针对角色的 REVOKE 语句成功执行,执行该语句的用户应具有管理员角色或者应对于给定的角色拥有 GRANT 选项。
可选的 GRANTED BY 子句可使指定的主体作为回收方来回收角色。如果未指定 GRANTED BY 子句,则当前用户作为回收方来回收角色。
示例 从用户 foo 回收角色 bar:
REVOKE bar FROM USER foo; 从用户 baz 和角色 qux 回收角色 bar 和 foo 的管理员选项:
REVOKE 摘要 REVOKE [ GRANT OPTION FOR ] ( privilege [, ...] | ALL PRIVILEGES ) ON [ TABLE ] table_name FROM ( user | USER user | ROLE role ) 说明 从指定的被授权者回收指定的权限。
指定 ALL PRIVILEGES 可以回收 DELETE、INSERT 和 SELETE 权限。
指定 ROLE PUBLIC 可以从 PUBLIC 角色回收权限。用户将保留直接或通过其他角色分配给他们的权限。
可选的 GRANT OPTION FOR 子句还会回收授予指定权限的权限。
为了使 REVOKE 语句成功执行,执行该语句的用户应拥有指定的权限并且对于这些权限拥有 GRANT OPTION。
示例 从用户 alice 回收对表 orders 的 INSERT 和 SELECT 权限:
REVOKE INSERT, SELECT ON orders FROM alice; 从所有用户回收对表 nation 的 SELECT 权限,此外还回收授予 SELECT 权限的权限:
SET ROLE 摘要 SET ROLE ( role | ALL | NONE ) 说明 SET ROLE 在当前目录中设置当前会话的启用角色。
SET ROLE role 启用为当前会话指定的单个角色。为了使 SET ROLE role 语句成功执行,执行该语句的用户应该具有给定角色的授予权限。
SET ROLE ALL 启用当前用户在当前会话中被授予的所有角色。
SET ROLE NONE 禁用当前用户在当前会话中被授予的所有角色。
限制 某些连接器不支持角色管理。有关更多详细信息,请参见连接器文档。
另请参见 CREATE ROLE、DROP ROLE、GRANT ROLES、REVOKE ROLES
SET SESSION 摘要 SET SESSION name = expression SET SESSION catalog.name = expression 说明 设置会话属性值。
示例 SET SESSION optimize_hash_generation = true; SET SESSION hive.optimized_reader_enabled = true; 另请参见 RESET SESSION、SHOW SESSION
SHOW CACHE 摘要 SHOW CACHE; 说明 SHOW CACHE 显示分离式缓存协调器元数据。分离式缓存包含有关缓存的表和分区的信息。
示例 显示所有缓存元数据
SHOW CACHE; 显示销售表的缓存元数据
SHOW CACHE sales; 限制 目前只有Hive连接器支持此功能。 有关更多详细信息,请参见连接器文档。
另请参见 CACHE TABLE、DROP CACHE
SHOW CATALOGS 摘要 SHOW CATALOGS [ LIKE pattern ] 说明 列出可用的目录。LIKE 子句可用于限制目录名称列表。
SHOW COLUMNS 摘要 SHOW COLUMNS FROM table 说明 列出 table 中的列及其数据类型和其他属性。
SHOW CREATE CUBE 概要 SHOW CREATE CUBE cube_name 描述 显示创建指定cube的SQL语句。
示例 在orders表上创建cubeorders_cube
CREATE CUBE orders_cube ON orders WITH (AGGREGATIONS = (avg(totalprice), sum(totalprice), count(*)), GROUP = (custKEY, ORDERkey), format= 'orc') 运行SHOW CREATE CUBE命令显示用于创建cubeorders_cube的SQL语句:
SHOW CREATE CUBE orders_cube; CREATE CUBE orders_cube ON orders WITH (AGGREGATIONS = (avg(totalprice), sum(totalprice), count(*)), GROUP = (custKEY, ORDERkey), format= 'orc')
SHOW CREATE VIEW 摘要 SHOW CREATE VIEW view_name 说明 显示创建指定的视图的 SQL 语句。
另请参见 CREATE VIEW
SHOW EXTERNAL FUNCTION 语法 SHOW EXTERNAL FUNCTION function_name [ ( parameter_type[, ...] ) ] 描述 输出注册在function manager中的external function函数信息。 如果指定输入参数,则输出精准匹配输入类型的 function_name 的函数信息.
例子 例如我们需要显示函数签名为 example.default.format(double, integer)的external function函数信息:
show external function example.default.format(double, integer); External Function | Argument Types --------------------------------------------------------------------------------------------------------------------------------------------+----------------- External FUNCTION example.default.format ( | double, integer k double, | h integer | ) | RETURNS varchar | | COMMENT 'format the number ''num'' to a format like''#,###,###.##'', rounded to ''lo'' decimal places, and returns the result as a string' | DETERMINISTIC | RETURNS NULL ON NULL INPUT | EXTERNAL 显示所有函数名称为 example.
SHOW FUNCTIONS 摘要 SHOW FUNCTIONS [ LIKE pattern [ ESCAPE 'escape_character' ] ] 说明 列出所有可以在查询中使用的函数,LIKE 子句可用于限制函数名称列表。
注意
如果需要列出外部函数,请设置会话属性list_built_in_functions_only为false。
SHOW GRANTS 摘要 SHOW GRANTS [ ON [ TABLE ] table_name ] 说明 列出当前用户对当前目录中指定表的权限。
如果未指定表名,该命令将列出当前用户对当前目录的所有模式中所有表的权限。
该命令要求设置当前目录。
注意
在执行任何授权命令之前,确保已启用身份验证。
示例 列出当前用户对表 orders 的权限:
SHOW GRANTS ON TABLE orders; 列出当前用户对当前目录的所有模式中所有表的权限:
SHOW GRANTS; 限制 某些连接器不支持 SHOW GRANTS。有关更多详细信息,请参见连接器文档。
另请参见 GRANT、REVOKE
SHOW ROLE GRANTS 摘要 SHOW ROLE GRANTS [ FROM catalog ] 说明 非递归地列出向 catalog(如果未指定 catalog,则为当前目录)中的会话用户授予的 ROLE。
SHOW ROLES 摘要 SHOW [CURRENT] ROLES [ FROM catalog ] 说明 SHOW ROLES 列出 catalog(如果未指定 catalog,则为当前目录)中的所有角色。
SHOW CURRENT ROLES 列出已针对 catalog(如果未指定 catalog,则为当前目录)中的会话启用的角色。
SHOW SCHEMAS 摘要 SHOW SCHEMAS [ FROM catalog ] [ LIKE pattern ] 说明 列出 catalog 或当前目录中的模式。LIKE 子句可用于限制模式名称列表。
SHOW SESSION 摘要 SHOW SESSION 说明 列出当前会话属性。
另请参见 RESET SESSION、SET SESSION
SHOW STATS 摘要 SHOW STATS FOR table SHOW STATS FOR ( SELECT * FROM table [ WHERE condition ] ) 说明 返回命名表或(有限)查询结果的近似统计信息。
针对每列返回统计信息并返回一个摘要行。
列 说明 column_name 列的名称(对于摘要行为 NULL) data_size 列中所有值的总大小(以字节为单位) distinct_values_count 列中唯一值的数量 nulls_fractions 列中为 NULL 的值部分 row_count 行数(仅针对摘要行返回) low_value 在该列中找到的最小值(仅适用于某些类型) high_value 在该列中找到的最大值(仅适用于某些类型)
SHOW TABLES 摘要 SHOW TABLES [ FROM schema ] [ LIKE pattern ] 说明 列出schema 或当前模式中的表。LIKE 子句可用于限制表名称列表。