AWS glueContext чтение не позволяет SQL-запрос - PullRequest
0 голосов
/ 08 января 2019

Я хочу прочитать отфильтрованные данные из экземпляра Mysql, используя задание AWS glue. Так как клеевое соединение jdbc не позволяет мне выдвинуть предикат, я пытаюсь явно создать соединение jdbc в своем коде.

Я хочу выполнить запрос select с предложением where к базе данных Mysql, используя соединение jdbc, как показано ниже

import com.amazonaws.services.glue.GlueContext
import org.apache.spark.SparkContext
import org.apache.spark.sql.SparkSession


object TryMe {

  def main(args: Array[String]): Unit = {
    val sc: SparkContext = new SparkContext()
    val glueContext: GlueContext = new GlueContext(sc)
    val spark: SparkSession = glueContext.getSparkSession

    // Read data into a DynamicFrame using the Data Catalog metadata
    val t = glueContext.read.format("jdbc").option("url","jdbc:mysql://serverIP:port/database").option("user","username").option("password","password").option("dbtable","select * from table1 where 1=1").option("driver","com.mysql.jdbc.Driver").load()

  }
}

Сбой с ошибкой

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException У вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, которое соответствует вашему Версия сервера MySQL для правильного синтаксиса для использования рядом с 'select * from table1, где 1 = 1, ГДЕ 1 = 0 'в строке 1

Разве это не должно работать? Как получить отфильтрованные данные, используя соединение JDBC, не считывая всю таблицу в кадр данных?

Ответы [ 2 ]

0 голосов
/ 16 января 2019
0 голосов
/ 15 января 2019

Я думаю, что проблема произошла, потому что вы не использовали запрос в скобках и не указали псевдоним. На мой взгляд, это должно выглядеть в следующем примере:

 val t = glueContext.read.format("jdbc").option("url","jdbc:mysql://serverIP:port/database").option("user","username").option("password","password").option("dbtable","(select * from table1 where 1=1) as t1").option("driver","com.mysql.jdbc.Driver").load()

Дополнительная информация о параметрах в источниках данных SQL:

https://spark.apache.org/docs/latest/sql-data-sources-jdbc.html

Когда речь идет о Glue и инфраструктуре, которую предоставляет Glue, есть также опция «push_down_predicate», но я использовал эту опцию только для источников данных, основанных на S3. Я думаю, что это не работает на других источниках, чем на S3 и неразделенных данных.

https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-partitions.html

...