gpt4 book ai didi

hadoop - hiveQL 中的嵌套选择

转载 作者:可可西里 更新时间:2023-11-01 16:39:33 26 4
gpt4 key购买 nike

在我的一个用例中,我有两个表,即 flow 和 conf。流表包含所有航类数据的列表。它有创建日期、数据文件名、飞机 ID 列。 conf 表包含配置信息。它有列 configdate、aircraftid、configurationame。为一种飞机类型创建了多个版本的配置。因此,当我们处理一个数据文件名时,我们需要从流表中识别 aircraftid,并从创建数据文件名之前创建的配置表中获取配置。所以,我试过了,

FROM (
SELECT
F_FILE_CREATION_DATE,
F_FILE_ARCHIVED_RELATIVE_PATH,
F_FILE_ARCHIVED_NAME,
K_AIRCRAFT
from T_FLOW f )x left join
(
select c.config_date, c.aircraft_id, c.configurationfrom t_conf c
) y on y.aircraft_id = x.K_AIRCRAFT
select
x.F_FILE_CREATION_DATE,
x.F_FILE_ARCHIVED_RELATIVE_PATH,
x.F_FILE_ARCHIVED_NAME,
x.K_AIRCRAFT,
y.config_date,
y.aircraft_id,
y.configuration;

这会获取为飞机创建的所有配置,这很明显,因为没有条件检查 conf.config_date < flow.f_file_creation_date。我试着像这样包含这个条件,

 FROM (
SELECT
F_FILE_CREATION_DATE,
F_FILE_ARCHIVED_RELATIVE_PATH,
F_FILE_ARCHIVED_NAME,
K_AIRCRAFT
from T_FLOW f )x join
(
select c.config_date, c.aircraft_id, c.FILEFILTER from t_conf c
) y on y.aircraft_id = x.K_AIRCRAFT where y.config_date < x.f_file_creation_date
select
x.F_FILE_CREATION_DATE,
x.F_FILE_ARCHIVED_RELATIVE_PATH,
x.F_FILE_ARCHIVED_NAME,
x.K_AIRCRAFT,
y.config_date,
y.aircraft_id,
y.filefilter;

这次失败,错误

 required (...)+ loop did not match anything at input 'where' in statement

有人可以给我一两个提示,告诉我哪里出错了,以及如何解决这个问题吗?

最佳答案

select  f.f_file_creation_date
,f.f_file_archived_relative_path
,f.f_file_archived_name
,f.k_aircraft

,c.config_date
,c.aircraft_id
,c.filefilter

from t_flow as f

join (select config_date
,aircraft_id
,filefilter

,lead (config_date,1,date '3000-01-01') over
(
partition by aircraft_id
order by config_date
) as next_config_date

from t_conf
) c

on c.aircraft_id =
f.k_aircraft

where f.f_file_creation_date >= c.config_date
and f.f_file_creation_date < c.next_config_date


请仔细阅读

发布问题

当您发布数据相关问题时 -

  1. 提供数据样本:源数据+所需结果。
    这将比您给出的任何解释都更清楚。它还将为进一步讨论提供共同背景,并为您和其他人提供一种验证给定解决方案正确性的方法。
  2. 提供表的大小属性(记录/数量)。
    这对于性能考虑很重要并且可能会影响给定的解决方案。

SQL

  1. Hive 当前不支持除 equijoin 之外的任何 JOIN 条件类型(例如 t1.X = t2.X 和 t1.Y = t2.Y)。这就是您收到错误的原因。 如果您正在进行内部联接(而不是外部联接),那么您可以将非等值联接条件移动到 WHERE 子句。
  2. 坚持 ISO SQL 标准。 SQL子句有一个约定俗成的顺序:SELECT-FROM-WHERE...
    除了深奥的错误消息外,您从深奥的语法中一无所获。
  3. 没有理由使用子查询来缩小列列表。
    只是为了非常清楚 - 这样做没有任何性能提升。更重要的是,如果它能像您假设的那样工作(但事实并非如此),性能会更差,而不是更好。

关于hadoop - hiveQL 中的嵌套选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44276515/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com