【问题标题】:How to get COUNT for same table in different databases with table name in SELECT statement?如何在 SELECT 语句中使用表名获取不同数据库中同一张表的 COUNT?
【发布时间】:2021-06-06 02:46:29
【问题描述】:

我正在使用 Spark SQL 将 11 个表从一个数据库 (DB1) 完全导出到另一个数据库 (DB2)。导出完成后,我将 DB1 和 DB2 上每个表的计数与表名进行比较,并检查它们是否匹配(或)不匹配。输出列应该是,

Table_name   DB1_count   DB2_count   Match (Y/N) ?
table_1         500         500           Y
table_2         376         325           N

到目前为止,我已经能够获取一张表的第 2 列和第 3 列。但是,我不确定如何为多个表和第 1 列和第 4 列实现相同的操作。

【问题讨论】:

    标签: sql scala apache-spark apache-spark-sql


    【解决方案1】:

    假设你有两张桌子:

    t1:
    
    DB1_count   DB2_count
    500         500
    

    t2:
    
    DB1_count   DB2_count
    376         325
    

    你可以添加表名列和匹配列,并做一个联合:

    select 'table_1' as Table_name,
           DB1_count, DB2_count,
           case when DB1_count = DB2_count then Y else N end as Match
    from t1
    union all
    select 'table_2' as Table_name,
           DB1_count, DB2_count,
           case when DB1_count = DB2_count then Y else N end as Match
    from t2
    

    要动态生成查询,可以尝试:

    val names = Seq(("table_1", "t1"), ("table_2", "t2"))
    val query = names.map(x => s"""
    select '${x._1}' as Table_name,
           DB1_count, DB2_count,
           case when DB1_count = DB2_count then Y else N end as Match
    from ${x._2}
    """).mkString("\nunion_all\n")
    
    val result = spark.sql(query)
    

    【讨论】:

    • 成功了!!非常感谢你的帮助 !!知道如何通过动态传递表名来为多个表实现相同的效果吗?
    • 您可以使用 Python/Scala 动态生成查询。
    • 不,但如果你能分享它,它会非常有帮助。
    • 谢谢@mck,但我正在使用 scala。有没有办法通过 scala 实现相同的目标?非常感谢您的帮助!!
    • @Shyam 编辑后的答案对你有用吗?
    猜你喜欢
    • 1970-01-01
    • 2021-08-05
    • 2011-02-12
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    相关资源
    最近更新 更多