不支持写入 DDL 操作。
在多路复用器设置中,溢出桶和前缀在所有数据库实例之间共享。
任何相关的 Lambda 限制。有关更多信息,请参阅《
AWS Lambda 开发人员指南
》中的
Lambda 配额
。
以下术语与 Cloudera Impala 连接器有关。
数据库实例
- 部署在本地、Amazon EC2 或 Amazon RDS 上的任何数据库实例。
处理程序
— 访问您数据库实例的 Lambda 处理程序。处理程序可以用于元数据或数据记录。
元数据处理程序
— 从您的数据库实例中检索元数据的 Lambda 处理程序。
记录处理程序
— 从您的数据库实例中检索数据记录的 Lambda 处理程序。
复合处理程序
— 从您的数据库实例中检索元数据和数据记录的 Lambda 处理程序。
属性或参数
— 处理程序用来提取数据库信息的数据库属性。您可以将这些属性配置为 Lambda 环境变量。
连接字符串
— 用于建立数据库实例连接的文本字符串。
目录
— 向 Athena 注册的非 AWS Glue 目录,是
connection_string
属性的必要前缀。
多路复用处理程序
— 可以接受和使用多个数据库连接的 Lambda 处理程序。
使用本节中的 Lambda 环境变量来配置 Cloudera Impala 连接器。
连接字符串
使用以下格式的 JDBC 连接字符串连接到 Impala 集群。
impala://${jdbc_connection_string
}
使用多路复用处理程序
您可以使用多路复用器通过单个 Lambda 函数连接到多个数据库实例。按目录名称来路由请求。在 Lambda 中使用以下类。
复合处理程序
ImpalaMuxCompositeHandler
元数据处理程序
ImpalaMuxMetadataHandler
记录处理程序
ImpalaMuxRecordHandler
多路复用处理程序参数
$
catalog
_connection_string
必需。Athena 目录的 Impala 集群连接字符串。将 Athena 中使用的目录的名称作为环境变量前缀。例如,如果向 Athena 注册的目录是
myimpalacatalog
,则环境变量名称是
myimpalacatalog_connection_string
。
default
必需。默认连接字符串。目录为
lambda:$
{
AWS_LAMBDA_FUNCTION_NAME
}
时使用此字符串。
以下示例属性适用于支持两个数据库实例的 Impala MUX Lambda 函数:
impala1
(默认)和
impala2
。
default
impala://jdbc:impala://some.impala.host.name:21050/?$
{
Test/impala1}
impala_catalog1_connection_string
impala://jdbc:impala://someother.impala.host.name:21050/?$
{
Test/impala1}
impala_catalog2_connection_string
impala://jdbc:impala://another.impala.host.name:21050/?UID=sample&PWD=sample
连接字符串
— 可以将用户名和密码指定为 JDBC 连接字符串中的属性。
AWS Secrets Manager
- 要将 Athena 联合查询功能与 AWS Secrets Manager 配合使用,连接到您的 Lambda 函数的 VPC 应该拥有
互联网访问权限
或者
VPC 端点
,以连接到 Secrets Manager。
您可以将 AWS Secrets Manager 中的密钥名称放入您的 JDBC 连接字符串中。连接器将该密钥名称替换为来自 Secrets Manager 的
username
和
password
值。
对于 Amazon RDS 数据库实例,将紧密集成这种支持。如果您使用 Amazon RDS,我们强烈建议您使用 AWS Secrets Manager 和凭证轮换。如果您的数据库不使用 Amazon RDS,请按以下格式将凭证存储为 JSON:
{"username": "${username}", "password": "${password}"}
带有密钥名称的示例连接字符串
以下字符串带有密钥名称
$
{
Test/impala1host}
。
impala://jdbc:impala://Impala1host:21050/?...&${Test/impala1host}&...
该连接器使用该密钥名称来检索密钥,并提供用户名和密码,如以下示例所示。
impala://jdbc:impala://Impala1host:21050/?...&UID=sample2&PWD=sample2&...
目前,Cloudera Impala 可以识别
UID
和
PWD
JDBC 属性。
使用单个连接处理程序
您可以使用以下单个连接元数据和记录处理程序连接到单个 Cloudera Impala 实例。
处理程序类型
复合处理程序
ImpalaCompositeHandler
元数据处理程序
ImpalaMetadataHandler
记录处理程序
ImpalaRecordHandler
单个连接处理程序参数
default
必需。默认连接字符串。
单个连接处理程序支持一个数据库实例,并且必须提供
default
连接字符串参数。将忽略所有其他连接字符串。
以下示例属性适用于 Lambda 函数支持的单个 Cloudera Impala 实例。
default
impala://jdbc:impala://Impala1host:21050/?secret=$
{
Test/impala1host}
spill_put_request_headers
(可选)用于溢出的 Amazon S3
putObject
请求的请求标头和值的 JSON 编码映射(例如,
{
"x-amz-server-side-encryption" :
"AES256"}
)。有关其他可能的标头,请参阅《
Amazon Simple Storage Service API 参考
》中的
PutObject
。
目前,Cloudera Impala 不支持聚合类型
ARRAY
、
MAP
、
STRUCT
或
UNIONTYPE
。聚合类型的列被视为 SQL 中的
VARCHAR
列。
分区和拆分
分区用于确定如何为该连接器生成拆分。Athena 将构建一个
varchar
类型的合成列,它将展示表的分区方案,以帮助该连接器生成拆分。该连接器不会修改实际的表定义。
Cloudera Impala 支持静态分区。Athena Cloudera Impala 连接器可从这些分区并行检索数据。如果您想查询具有均匀分区分布的非常大的数据集,强烈建议使用静态分区。Cloudera Impala 连接器能够灵活地应对并发造成的节流。
Athena Cloudera Impala 连接器执行谓词下推,以减少查询扫描的数据量。
LIMIT
子句、简单谓词和复杂表达式将下推到连接器,以减少扫描数据量并缩短查询执行的运行时间。
LIMIT N
语句用于减少查询扫描的数据量。
LIMIT N
下推时,连接器仅向 Athena 返回
N
行。
谓词是 SQL 查询的
WHERE
子句中的表达式,其评估结果为布尔值并根据多个条件筛选行。Athena Cloudera Impala 连接器可以组合这些表达式并将其直接推送到 Cloudera Impala,以增强功能并减少扫描的数据量。
以下 Athena Cloudera Impala 连接器运算符支持谓词下推:
布尔值:
AND、OR、NOT
相等:
EQUAL、NOT_EQUAL、LESS_THAN、LESS_THAN_OR_EQUAL、GREATER_THAN、GREATER_THAN_OR_EQUAL、IS_DISTINCT_FROM、NULL_IF、IS_NULL
算术:
ADD、SUBTRACT、MULTIPLY、DIVIDE、MODULUS、NEGATE
其他:
LIKE_PATTERN、IN
要增强查询功能,组合下推类型,如以下示例所示:
SELECT *
FROM my_table
WHERE col_a > 10
AND ((col_a + col_b) > (col_c % col_d))
AND (col_e IN ('val1', 'val2', 'val3') OR col_f LIKE '%pattern%')
LIMIT 10;
Cloudera Impala 连接器支持
传递查询
。传递查询使用表函数将完整查询下推到数据来源来执行查询。
要在 Cloudera Impala 中执行传递查询,可以使用以下语法:
SELECT * FROM TABLE(
system.query(
query => 'query string
'
以下示例查询将查询下推到 Cloudera Impala 中的数据来源。该查询选择了 customer
表中的所有列,将结果限制为 10。
SELECT * FROM TABLE(
system.query(
query => 'SELECT * FROM customer LIMIT 10'