Спарк-красное смещение сбитых фильтров - PullRequest
1 голос
/ 12 марта 2020

Я использую spark-redshift для чтения данных из кластера Redshift. Пример кода:

 spark.read
  .format("com.databricks.spark.redshift")
  .option("url", s"$redshiftUrl/$redshiftDatabase")
  .option("user", redshiftUsername)
  .option("password", redshiftPassword)
  .option("tempdir", s"s3a://$redshiftTempBucket")
  .option("driver", redshiftDriver)
  .option("tempformat", "CSV GZIP")
  .option("aws_iam_role", redshiftAwsIamRole)
  .option("dbtable", s"${table.schema}.${table.name}")
  .load()
  .filter(col("SOME_COLUMN_TO_FILTER_BY") === lit(23))

Расширенный физический план выглядит следующим образом:

    == Physical Plan ==
InMemoryTableScan [columns..., ... 45 more fields]
   +- InMemoryRelation [columns..., ... 45 more fields], StorageLevel(disk, memory, deserialized, 1 replicas)
         +- *(1) Filter (cast(SOME_COLUMN_TO_FILTER_BY#7022 as bigint) = 23)
            +- *(1) Scan RedshiftRelation(${table.schema}.${table.name}) [columns...,... 45 more fields] PushedFilters: [*IsNotNull(SOME_COLUMN_TO_FILTER_BY)], ReadSchema: struct<...>

Итак, как вы можете видеть в PressedFilters, у нас есть только проверка на IsNotNull и отсутствие равенства 23: PushedFilters: [*IsNotNull(SOME_COLUMN_TO_FILTER_BY)]

В результате запрос, который Redshift использует для выгрузки данных в S3:

SELECT columns... FROM "schema"."table" WHERE "SOME_COLUMN_TO_FILTER_BY" IS NOT NULL

Мой вопрос: почему равенство 23 не было перенесено на запрос, который Redshift использует для выгрузки данных до S3?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...