[HADOOP] hiveQL에서 선택 중첩
HADOOPhiveQL에서 선택 중첩
내 유스 케이스 중 하나에서, 나는 두 개의 테이블, 즉 흐름의 conf 있습니다. 흐름 테이블은 모든 비행 데이터의 목록이 포함되어 있습니다. 그것은 열에서 CreationDate, 한 DataFileName, aircraftid있다. conf의 테이블 구성 정보가 포함되어 있습니다. 그것은 열 configdate, aircraftid, configurationame있다. 한 기종에 대해 생성 구성의 여러 버전이 있습니다. 우리가 한 DataFileName을 처리 할 때, 우리는 흐름 테이블에서 aircraftid를 식별하고, 한 DataFileName가 생성되기 전에 방금 만든 conf의 테이블에서 구성을 선택해야합니다. 그래서, 나는,이 시도
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 이 시간은 오류로 인해 실패 누군가가 나에게 내가 어떻게이 문제를 해결하기 위해 잘못과에 갈거야 힌트 또는 두 줄 수 있습니까? 질문을 게시 때 데이터와 관련된 질문을 게시 - SQL 나는 당신의 오류를 재현 할 수 없습니다. 나는 당신의 쿼리가 유효 같아요.
당신은 하이브 어떤 버전을 사용합니까? 나는 하이브 2.1.1이 쿼리를 테스트했다. from https://stackoverflow.com/questions/44276515/nested-select-in-hiveql by cc-by-sa and MIT license 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
해결법
1.
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
2.나는 당신의 오류를 재현 할 수 없습니다. 나는 당신의 쿼리가 유효 같아요.
당신은 하이브 어떤 버전을 사용합니까? 나는 하이브 2.1.1이 쿼리를 테스트했다.
DROP TABLE IF EXISTS t_flow;
CREATE TABLE IF NOT EXISTS t_flow (
f_file_creation_date DATE
, f_file_archived_relative_path STRING
, f_file_archived_name STRING
, k_aircraft STRING
);
-- Conf table contains configuration information.
-- It has columns configdate, aircraftid, configurationame
DROP TABLE IF EXISTS t_conf;
CREATE TABLE IF NOT EXISTS t_conf (
config_date DATE
, aircraft_id STRING
, filefilter STRING
);
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
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;
'HADOOP' 카테고리의 다른 글
[HADOOP] HDFS는 : java.io.FileNotFoundException : 파일이 존재하지 않습니다 name._COPYING를 (0) | 2019.10.06 |
---|---|
[HADOOP] 하이브에서 선택 쿼리를 실행하는 동안 오류 (0) | 2019.10.06 |
[HADOOP] MySQL의와 하이브 JDBC 연결 설정 또는 매핑 (0) | 2019.10.06 |
[HADOOP] 어떻게 작업이 완료되기 전에 하둡에 감소 / 전체지도를 다시 실행하려면? (0) | 2019.10.06 |
[HADOOP] 어떻게 측면 뷰는 XML 데이터 형식 하이브에서 폭발 사용 하는가? (0) | 2019.10.06 |