[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
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
질문을 게시
때 데이터와 관련된 질문을 게시 -
SQL
-
==============================
2.나는 당신의 오류를 재현 할 수 없습니다. 나는 당신의 쿼리가 유효 같아요. 당신은 하이브 어떤 버전을 사용합니까? 나는 하이브 2.1.1이 쿼리를 테스트했다.
나는 당신의 오류를 재현 할 수 없습니다. 나는 당신의 쿼리가 유효 같아요. 당신은 하이브 어떤 버전을 사용합니까? 나는 하이브 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;
from https://stackoverflow.com/questions/44276515/nested-select-in-hiveql by cc-by-sa and MIT license
'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 |