10-08-2019 10:32:02 CST load_data_ods_incr ERROR - Failed to build job executor for job load_data_od

本文详细解析了Azkaban调度平台中load_data_ods_incr任务执行失败的问题,指出原因是未正确传递参数,特别是在ExecutorFlow的FlowParameters中缺少ui_dt变量的设置。文章提供了具体的解决步骤,即如何通过添加参数来避免此类错误。

Azkabn运行报错

10-08-2019 10:32:02 CST load_data_ods_incr ERROR - Failed to build job executor for job load_data_ods_incrCould not find variable substitution for variable(s) [command->ui_dt]
10-08-2019 10:32:02 CST load_data_ods_incr ERROR - Failed to build job type
10-08-2019 10:32:02 CST load_data_ods_incr ERROR - Job run failed preparing the job.
10-08-2019 10:32:02 CST load_data_ods_incr INFO - Finishing job load_data_ods_incr at 1565404322087 with status FAILED

原因 :未传入参数,有些脚本执行需要从外部传入参数

解决办法

在 Executor Flow的 Flow Parameters
传入参数
add row
name ui_dt value 20190809
例如本人报错传入的是20190809

### 控制台执行 SQL 查询时出现错误的解决方案 在控制台上执行 `select count(*) from ods_car_data_inc` 时,如果查询失败,可能是由于多种原因引起的。以下是可能的原因及解决方案: #### 1. **统计信息导致的问题** 当 Hive 的配置项 `hive.compute.query.using.stats=true` 时,`select count(*)` 会直接从元数据中获取表的记录条数[^1]。如果元数据中的统计信息不准确或未更新,则可能导致查询结果为空或失败。 **解决方案:** - 设置 `hive.compute.query.using.stats=false`,以确保查询在集群上实际运行并返回真实的数据量。 ```sql set hive.compute.query.using.stats=false; select count(*) from ods_car_data_inc; ``` #### 2. **表或分区不存在** 如果表 `ods_car_data_inc` 是分区表,并且查询时没有指定有效的分区条件,则可能会导致语义异常(SemanticException)。例如: ```sql FAILED: SemanticException [Error 10041]: No partition predicate found for Alias "table_name" Table "table_name" ``` 这表明查询缺少必要的分区过滤条件[^2]。 **解决方案:** - 确认表是否为分区表。如果是分区表,请在查询中添加有效的分区条件。 ```sql select count(*) from ods_car_data_inc where dt='2023-01-01'; ``` #### 3. **表数据为空** 即使表存在,但如果表中没有任何数据,则 `select count(*)` 返回的结果将是 0。这种情况并不算错误,但可能会被误解为查询失败。 **解决方案:** - 检查表是否有数据。可以先尝试查询前几行数据来确认。 ```sql select * from ods_car_data_inc limit 10; ``` #### 4. **权限问题** 用户可能没有足够的权限访问表 `ods_car_data_inc` 或其底层存储的数据文件。 **解决方案:** - 确认当前用户的权限是否正确。可以通过以下命令检查表的所有者和权限。 ```sql show table extended like 'ods_car_data_inc'; ``` #### 5. **语法或拼写错误** SQL 查询可能存在语法错误或表名拼写错误。 **解决方案:** - 检查表名是否正确,以及是否存在大小写敏感问题。 ```sql desc ods_car_data_inc; ``` #### 6. **性能优化建议** 根据引用[^3],`select count(*)` 和 `select count(1)` 在大多数情况下返回的结果相同。但在某些特定场景下,选择不同的计数方式可能会提升性能。 - 如果表中只有一个字段,`count(*)` 可能更快。 - 如果表中有主键,使用 `count(主键)` 可能更高效。 --- ### 示例代码 以下是一个完整的示例,展示如何排查和解决 `select count(*)` 查询失败的问题: ```sql -- 检查表是否存在 desc ods_car_data_inc; -- 检查表是否有数据 select * from ods_car_data_inc limit 10; -- 禁用统计信息查询 set hive.compute.query.using.stats=false; -- 执行计数查询 select count(*) from ods_car_data_inc; -- 如果是分区表,添加分区条件 select count(*) from ods_car_data_inc where dt='2023-01-01'; ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值