从Hive查询Redshift不下推谓词

时间:2019-12-20 16:24:49

标签: apache-spark hive amazon-redshift amazon-emr

我启动了带有EMR 5.28.0,Spark和Hive的AWS EMR集群。 我曾经使用带有spark-redshift连接器的Spark SQL,这使我能够在Redshift中进行读取/写入,从而创建如下外部表:

CREATE TABLE `test`.`redshift_table` (`id` INT, `object_id` STRING)
USING com.databricks.spark.redshift
OPTIONS (
  `tempdir` 's3a://my_bucket/table/',
  `url` 'jdbc:redshift://xxxxxx:5439/database?user=user&password=password',
  `forward_spark_s3_credentials` 'true',
  `serialization.format` '1',
  `dbtable` 'my.table'
)

现在我正在寻找Hive中的等效内容:

  • 至少能够从Hive读取Redshift表(这样我就可以将Redshift数据与datalake中的其他表连接起来)
  • ,如果可能的话,也可以从Hive写入Redshift(因此我可以在数据湖中创建ETL,将一些结果写入Redshift)

我一直在环顾四周,但是我不确定CREATE TABLE的格式是什么,以及之前是否需要在集群上安装其他东西。

谢谢

更新: 我现在可以使用这些罐子通过EMR 5.28.0做到这一点:

,然后在Hive中使用以下命令创建表:

CREATE EXTERNAL TABLE test.table(
    id INTEGER,
    name STRING
)
STORED BY 'org.apache.hive.storage.jdbc.JdbcStorageHandler'
TBLPROPERTIES (
    "hive.sql.database.type" = "POSTGRES",
    "hive.sql.jdbc.driver" = "com.amazon.redshift.jdbc.Driver",
    "hive.sql.jdbc.url" = "jdbc:redshift://host:5439/database",
    "hive.sql.dbcp.username" = "user",
    "hive.sql.dbcp.password" = "password",
    "hive.sql.table" = "schema.name",
    "hive.sql.dbcp.maxActive" = "1"
);

我现在遇到的问题是它不会将谓词下推到Redshift。例如“ SELECT * FROM test.table,其中id = 1;”首先执行Redshift查询以读取整个表格,请问如何更改此行为?

我检查了Hive设置,并且拥有:

hive.optimize.ppd=true
hive.optimize.ppd.storage=true

0 个答案:

没有答案