DataWorks想在mapreduce中指定两个表的所有分区,有什么办法吗?[阿里云DataWorks]

DataWorks想在mapreduce中指定两个表的所有分区,用 app_id=’‘不可以,有什么办法吗?job);InputUtils.addTable(TableInfo.builder().tableName(“middleoffice_report_transaction_t_wideorder_dws”).partSpec(“app_id=’‘”).build(), job);
OutputUtils.addTable(TableInfo.builder().tableName(“middleoffice_report_transaction_t_wideorder_day_dws”).partSpec(“app_id=’*'”).build(), job);

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
=====这是一个广告位,招租中,联系qq 78315851====
3 条回复 A 作者 M 管理员
  1. 在DataWorks中,如果你想在MapReduce作业中指定两个表的所有分区,你可以使用 InputUtilsOutputUtils 类的 addTable() 方法。
    但是,你需要确保你在调用这个方法时正确地指定了分区信息。根据你的代码片段,我注意到你在为输入表 “middleoffice_report_transaction_t_wideorder_dws” 指定分区时使用了 partSpec("app_id=')。这可能意味着你想要选择所有分区,但在这种情况下,你实际上选择了包含空字符串作为其 “app_id” 分区值的所有分区。
    如果你想要选择所有分区,你应该将 partSpec() 的参数更改为 partSpec("*") 或者直接省略这个参数。例如:

    InputUtils.addTable(TableInfo.builder().tableName("middleoffice_report_transaction_t_wideorder_dws").partSpec("*").build(), job);OutputUtils.addTable(TableInfo.builder().tableName("middleoffice_report_transaction_t_wideorder_day_dws").partSpec("*").build(), job);
  2. 在 DataWorks 中,您可以使用 InputUtils.addTableOutputUtils.addTable 方法来指定 MapReduce 作业的输入表和输出表。这两个方法都需要一个 TableInfo 参数,其中包含表名和分区信息。
    然而,由于 Spark SQL 不支持 app_id=' 这种方式来指定所有分区,所以您不能直接在 DataWorks 中使用这种方式。取而代之,您可以使用以下两种方法之一来解决这个问题:

    1. 使用 HiveContext 创建一个临时视图,然后再使用这个视图作为 MapReduce 作业的输入表。例如,您可以先执行以下命令:
      val df = spark.sql("SELECT * FROM middleoffice_report_transaction_t_wideorder_dws WHERE app_id='")df.createOrReplaceTempView("temp_view")

    然后,您可以将这个临时视图作为输入表传递给 MapReduce 作业:

    val inputDF = spark.sql("SELECT * FROM temp_view")
    1. 使用 Hive 客户端或 Beeline 工具来查询分区表,并将其结果保存为一个新的表。例如,您可以执行以下命令:
      hive -e "CREATE TABLE middleoffice_report_transaction_t_wideorder_day_dws AS SELECT * FROM middleoffice_report_transaction_t_wideorder_dws WHERE app_id='"

    然后,您可以将新创建的表作为输入表传递给 MapReduce 作业:

    val inputDF = spark.sql("SELECT * FROM middleoffice_report_transaction_t_wideorder_day_dws")
  3. 0