Как перечислить имя таблицы в искровом sql с помощью java?

Я хочу получить имена таблиц в искровом sql-запросе.

Sql выглядит как " select * from table_a as A join table_b as b where a.pk=b.fk". И я хочу, чтобы список содержал table_a и table_b.

Перед этим вопросом я нашел scala-код. Как получить имена таблиц из SQL-запроса? попытался перевести его в java, но не удалось.

Любая помощь будет оценена по достоинству.

java,apache-spark,

0

Ответов: 1


0
public static Set<String> getRelations(Dataset<org.apache.spark.sql.Row> dataframe){
    LogicalPlan plan = dataframe.queryExecution().analyzed();

    return scala.collection.JavaConverters.seqAsJavaListConverter(plan.collectLeaves()).asJava()
    .stream()
    .map(logicalPlan -> {

        if(logicalPlan instanceof CatalogRelation){
            CatalogRelation catalogRelation = (CatalogRelation) logicalPlan;
            return catalogRelation.tableMeta().database() + "." + catalogRelation.tableMeta().identifier().table();
        }
        if(logicalPlan instanceof LogicalRelation){
            LogicalRelation logicalRelation = (LogicalRelation) logicalPlan;
            return logicalRelation.catalogTable().get().database() + "." + logicalRelation.catalogTable().get().identifier().table();
        }
        return "";
    }).collect(Collectors.toSet());
}

Это функция getRelations () для извлечения отношений из вашего Dataframe.

Dataset<org.apache.spark.sql.Row> df = spark.sql("select * from table_a as A join table_b as b where a.pk=b.fk");

Это даст вам набор данных, который вы можете передать getRelations (), чтобы получить ваши отношения в запросе.

Java, Apache-искра,
Похожие вопросы