【发布时间】:2020-07-27 13:27:53
【问题描述】:
我是 Impala 的新手,我需要使用选择结果集创建表,此外,此 sql 是使用 JDBC 在 Java 中运行的,请参阅下面的查询:
create table if not exists my_temp_table as select
41 as rule_id,49 as record_id,
(select count(1) as val from dirty_table where msg regexp '^[1]([3-9])[0-9]{9}$' )/(select count(1) from dirty_table);
我需要创建表my_temp_table 并将数据插入到该表中,这是我需要运行的一条SQL。但它运行失败并给出如下错误:
[HY000][500051] [Cloudera][ImpalaJDBCDriver](500051) ERROR processing query/statement. Error Code: 0, SQL state: TStatus(statusCode:ERROR_STATUS, sqlState:HY000, errorMessage:ParseException: Syntax error
经过检查,我知道 Impala 不支持SELECT 子句子查询,我们只能使用子查询
在 FROM 或 WHERE 子句中,请参阅 Impala 文档:https://impala.apache.org/docs/build/html/topics/impala_subqueries.html。
所以对于这个问题,我该如何解决这个问题。
我的想法:
- 更新sql让它执行,我试过
WITH就像下面的sql,它可以工作但不能用于CREATE TABLE ... AS ...。
WITH q1 AS (
select count(1) as val from dirty_table where msg regexp '^[1]([3-9])[0-9]{9}$'
),
q2 AS (
select count(1) val2 from dirty_table
)
SELECT 100 * q1.val / q2.val2 result
FROM q1, q2
- 或者,MySQL或Oracle中是否有类似
BEGIN ... END的语句,那么我可以单独运行这个sql。
【问题讨论】:
标签: java sql hadoop count impala