Apache spark 来自配置单元的查询红移不下推谓词

Apache spark 来自配置单元的查询红移不下推谓词,apache-spark,hive,amazon-redshift,amazon-emr,Apache Spark,Hive,Amazon Redshift,Amazon Emr,我用EMR5.28.0、Spark和Hive发布了一个AWS EMR集群。 我曾经使用Spark redshift connector来激发SQL,使我能够在redshift中读/写,并创建如下外部表: CREATE TABLE `test`.`redshift_table` (`id` INT, `object_id` STRING) USING com.databricks.spark.redshift OPTIONS ( `tempdir` 's3a://my_bucket/table

我用EMR5.28.0、Spark和Hive发布了一个AWS EMR集群。 我曾经使用Spark redshift connector来激发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'
)
现在我在蜂箱中寻找同样的东西:

  • 至少能够从配置单元中读取红移表(这样我就可以将红移数据与datalake中的其他表连接起来)
  • 如果可能的话,也可以从配置单元写入Redshift(这样我就可以在数据池中创建ETL,将一些结果写入Redshift)
我一直在四处寻找,但我不确定CREATE表的格式是什么,以及之前是否需要在集群上安装其他东西

谢谢

更新: 我现在已经能够使用这些JAR在EMR 5.28.0中实现这一点:

然后使用以下命令在配置单元中创建表:

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"
);
我现在遇到的问题是,它不会将谓词下推到红移。例如,“SELECT*FROM test.table where id=1;”首先执行一个红移查询,读取整个表,您知道如何更改此行为吗

我检查了配置单元设置,我有:

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

是否有任何理由不使用火花红移接头?我仍然更喜欢使用JDBC连接来读取spark中的红移,它更干净。此外,我还没有尝试过这一点,但您可以在glue catalog中创建一个外部表,指向红移中的相应表,并将glue catalog设置为EMR配置单元中的metastore。这应该允许您将数据从红移读取到spark中。原因是自2016年以来,Databricks不再更新spark红移连接器(至少是开源版本),因此它将在spark或红移的新版本中停止工作。不幸的是,在胶水目录中,我无法指向红移表。我将看看是否有新的Athena联邦查询工具可以做到这一点。我想你也可以使用psycopg2 python库连接到redshift,并且只在后台使用postgre。我希望能够在SQL中完成所有操作,以便分析师可以完成他们的所有工作(红移到配置单元,配置单元到红移,配置单元和红移之间的连接,等等)与使用Spark Thrift Server或HiveServer的SQL客户端。最后,我设法再次使用Spark红移连接器,并将Glue Data Catalog作为元存储。我遇到的问题是,我必须使用一个非空位置的数据库,以使我的DDL在Spark SQL中工作(基本上是为我在Glue Data Catalog UI中使用的数据库的“location”字段添加一个随机值)。