Как получить инструкцию Create для таблицы в какой-либо другой базе данных в Spark, используя JDBC

#scala #apache-spark #jdbc #impala

#scala #apache-spark #jdbc #impala

Вопрос:

Постановка задачи:

  1. У меня есть база данных Impala, в которой присутствует несколько таблиц

  2. Я создаю соединение Spark JDBC с Impala и загружаю эти таблицы в spark dataframe для моих проверок, подобных этой, которая работает нормально:

      val df = spark.read.format("jdbc")
                  .option("url","url")
                  .option("dbtable","tablename")
                  .load()
      
  3. Теперь следующий шаг и моя актуальная проблема в том, что мне нужно найти инструкцию create, которая использовалась для создания таблиц в самой Impala

  4. Поскольку я не могу выполнить команду, подобную приведенной ниже, поскольку она выдает ошибку, могу ли я в любом случае получить инструкцию show create для таблиц, присутствующих в Impala.

     val df = spark.read.format("jdbc")
                  .option("url","url")
                  .option("dbtable","show create table tablename")
                  .load()
      

Ответ №1:

Возможно, вы можете использовать Spark SQL «изначально» для выполнения чего-то вроде

 val createstmt = spark.sql("show create table <tablename>")
  

Результирующий фрейм данных будет иметь один столбец (тип string), который содержит полную CREATE TABLE инструкцию.

Но, если вы все еще решите использовать маршрут JDBC, всегда есть возможность использовать старый добрый интерфейс JDBC. В конце концов, Scala понимает все, написанное на Java…

 import java.sql.*
Connection conn = DriverManager.getConnection("url")
Statement stmt = conn.createStatement()
ResultSet rs = stmt.executeQuery("show create table <tablename>")
...etc...
  

Комментарии:

1. Проблема в том, что таблица, для которой мне нужен оператор ddl или show create, присутствует в некоторой базе данных, такой как MySQL. Мне нужно установить соединение jdbc для чтения этой таблицы, а jdbc предоставляет только метод load, который ожидает только инструкцию select. Передача этой инструкции в .option(«dbtable», «show create table имя_таблицы») возвращает ошибку.

2. Итак, я НЕ понял вашего вопроса, и Impala на самом деле не имеет к этому никакого отношения … 🙂

3. перефразировал формулировку проблемы. Надеюсь, теперь это имеет больше смысла

4. Работает ли ваш Spark в отдельном кластере? Т.е. зачем вам JDBC?

5. вы абсолютно правы. Хотя я только что просмотрел ваш ответ, но я также сделал то же самое и смог получить результаты утром. Это нужно было решить с помощью простого старого кода подключения Java / Scala JDBC, а не spark API. Я принял ваш ответ. Спасибо за вашу помощь