【问题标题】:How to execute multiple SQL queries defined in a SQL file如何执行 SQL 文件中定义的多个 SQL 查询
【发布时间】:2021-03-27 10:39:29
【问题描述】:

我有一个 SQL 文件,其中包含许多这样的 SQL 查询:

CREATE TABLE ..... ;
ALTER TABLE .... ;

我想在单个 spark.sql 调用中执行这些查询 如何在 JAVA 中实现这一点?

谢谢

【问题讨论】:

    标签: java apache-spark


    【解决方案1】:

    Spark 不支持通过一次调用 spark.sql 来执行多个查询(请参阅 this SO answer)。如果您不介意多次调用spark.sql,可以将.sql 文件读入一个字符串,将其拆分为单独的查询,然后将其传递给spark.sql,如下所示:

    import java.nio.file.*;
    
    public static void main(String[] args) {
        String[] commands;
    
        try {
            Path sqlPath = FileSystems.getDefault().getPath("query.sql");
            String sql = new String(Files.readAllBytes(sqlPath));
            commands = sql.split(";", 0);
        } catch (Exception e) {
            System.out.println("failed to read SQL file");
            return;
        }
    
        for (int i = 0; i < commands.length; i++) {
            spark.sql(commands[i]);
        }
    }
    

    【讨论】:

    • 不应该只是spark.sql(sql)吗?为什么要将查询的执行返回到数据集中?
    • 提示:分号应该是要执行的 SQL 查询之间的分隔符。
    • 更新为一次迭代一个命令,由;分割
    • 这现在不能回答问题。问题明确表示“在单个 spark.sql 调用中”。
    • @superhawk610 - 那么你应该在你的回答中解释这一点。 Q: How can I do A? A: Do BQ: How can I do A? A: You can't, but you can do B 之间的区别很大。前者使原始问题悬而未决。否则,您的回答很好。我建议您将您刚刚在您的评论中对我所做的陈述添加到您的答案顶部。 (ps:这不仅仅是语义。我认为在一次调用中完成所有操作会更有效。此外,由于上下文的原因,在一次调用中执行两件事而不是两件事可能会产生不同的结果)
    猜你喜欢
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 2018-05-14
    • 1970-01-01
    • 2012-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多