KR102041168B1 - Union 유형 연산을 포함하는 쿼리 처리 - Google Patents

Union 유형 연산을 포함하는 쿼리 처리 Download PDF

Info

Publication number
KR102041168B1
KR102041168B1 KR1020177014938A KR20177014938A KR102041168B1 KR 102041168 B1 KR102041168 B1 KR 102041168B1 KR 1020177014938 A KR1020177014938 A KR 1020177014938A KR 20177014938 A KR20177014938 A KR 20177014938A KR 102041168 B1 KR102041168 B1 KR 102041168B1
Authority
KR
South Korea
Prior art keywords
data
data set
query
computer program
sql query
Prior art date
Application number
KR1020177014938A
Other languages
English (en)
Other versions
KR20170083569A (ko
Inventor
이안 스켓쳐
알렉산드르 라브렌톄프
Original Assignee
아브 이니티오 테크놀로지 엘엘시
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 아브 이니티오 테크놀로지 엘엘시 filed Critical 아브 이니티오 테크놀로지 엘엘시
Publication of KR20170083569A publication Critical patent/KR20170083569A/ko
Application granted granted Critical
Publication of KR102041168B1 publication Critical patent/KR102041168B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation
    • G06F16/24534Query rewriting; Transformation
    • G06F16/24542Plan optimisation
    • G06F16/24544Join order optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/242Query formulation
    • G06F16/2433Query languages
    • G06F16/244Grouping and aggregation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2452Query translation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/284Relational databases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9024Graphs; Linked lists
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Software Systems (AREA)
  • Computational Linguistics (AREA)
  • Operations Research (AREA)
  • Mathematical Physics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

SQL 쿼리에 기초하여 컴퓨터 프로그램을 생성하는 방법은, 제1 데이터 소스에 저장된 제1 데이터 세트에 대한 참조를 포함하고 상기 제1 데이터 소스와 상이한 제2 데이터 소스에 저장된 제2 데이터 세트에 대한 참조를 포함하는, SQL 쿼리를 수신하는 것, 상기 SQL 쿼리가 제1 union 유형 연산 및 제1 집계 연산을 포함하는 2 이상의 커맨드를 포함한다고 결정하는 것, 상기 SQL 쿼리가 상기 제1 union 유형 연산이 상기 제1 데이터 세트로부터의 데이터의 적어도 일 부분에 적용될 것이고, 상기 제2 데이터 세트로부터의 데이터의 적어도 일 부분에 적용될 것임을 기술한다고 결정하는 것, 상기 SQL 쿼리가 상기 제1 집계 연산이 상기 제1 union 유형 연산으로부터의 결과인 데이터에 적용될 것임을 기술한다고 결정하는 것; 및 상기 컴퓨터 프로그램을 생성하는 것을 포함한다.

Description

UNION 유형 연산을 포함하는 쿼리 처리{PROCESSING QUERIES CONTAINING A UNION-TYPE OPERATION}
이 출원은 2014년 11월 14일에 출원된 특허출원번호 제62/079,922호의 우선권을 주장하는 2015년 6월 22에 출원된 특허출원번호 제14/746,188호의 우선권을 주장하며, 이 출원들의 내용은 본원에 원용된다.
본원은 union 유형 연산(union-type operation)을 포함하는 쿼리 처리에 관한 것이다.
데이터 소스로의 쿼리는 데이터가 데이터 소스로부터 검색되도록 특정된다. 쿼리는 데이터 소스(예, 데이터베이스)에 제공될 수 있고, 데이터 소스와 연관된 데이터 처리 시스템(예, 데이터베이스 관리 시스템)이 쿼리에 의해 특정되는 데이터를 복귀시킬 수 있다. 다양한 기술이 쿼리로부터 특정 데이터 소스 내의 데이터를 식별하도록 쿼리를 파싱하도록 사용될 수 있다.
측면 1은 SQL 쿼리에 기초하여 컴퓨터 프로그램을 생성하는 방법이며, 제1 데이터 소스에 저장된 제1 데이터 세트에 대한 참조를 포함하고 상기 제1 데이터 소스와 상이한 제2 데이터 소스에 저장된 제2 데이터 세트에 대한 참조를 포함하는, SQL 쿼리를 수신하는 단계; 상기 SQL 쿼리가 제1 union 유형 연산 및 제1 집계 연산을 포함하는 2 이상의 커맨드를 포함한다고 결정하고, 상기 SQL 쿼리가 상기 제1 union 유형 연산이 상기 제1 데이터 세트로부터의 데이터의 적어도 일 부분에 적용될 것이고, 상기 제2 데이터 세트로부터의 데이터의 적어도 일 부분에 적용될 것임을 기술한다고 결정하는 단계; 상기 SQL 쿼리가 상기 제1 집계 연산이 상기 제1 union 유형 연산으로부터의 결과인 데이터에 적용될 것임을 기술한다고 결정하는 단계; 상기 SQL 쿼리에 기초하여 제1 시스템 상에 컴퓨터 프로그램을 생성하는 단계로서, 상기 컴퓨터 프로그램은 상기 제1 데이터 세트로부터의 데이터의 부분에서 제2 집계 연산을 수행하도록 제2 시스템에 지시하는 명령을 송신하고, 상기 제2 시스템으로부터 데이터의 제1 부분의 요약인 특정 데이터 세트를 수신하고, 제2 데이터 세트로부터의 데이터의 부분의 요약 및 상기 특정 데이터 세트에 대해 제2 union 유형 연산을 수행하도록 구성된, 컴퓨터 프로그램을 생성하는 단계를 포함한다.
측면 2는 측면 1의 방법이며, 여기서 상기 컴퓨터 프로그램은, 제3 시스템에게 상기 제2 데이터 세트로부터의 데이터의 부분에 대해 제2 집계 연산을 수행하도록 지시하는 명령을 송신하고, 상기 제3 시스템으로부터, 데이터의 제2 부분의 요약인 특정 데이터 세트를 수신하도록 더 구성된다.
측면 3은 측면 1 또는 2의 방법이고, 여기서 컴퓨터 프로그램은 데이터의 제1 부분과 데이터의 제2 부분의 요약의 요약들인 데이터 세트에 적용되는 SQL 쿼리의 union 유형 연산을 나타내는 제1 컴포넌트로서, 각각의 요약은 데이터의 대응하는 각각의 부분보다 더 작은 레코드를 포함하는 제1 컴포넌트, 및 제1 데이터 세트를 나타내는 제2 컴포넌트로서, 실행시 명령이 송신되도록 하는, 제2 컴포넌트를 포함한다.
측면 4은 측면 3의 방법으로, 제2 데이터 세트를 나타내는 제3 컴포넌트, 및 제3 집계 연산을 나타내는 제4 컴포넌트를 포함하고, 상기 제3 컴포넌트의 출력이 상기 제4 컴포넌트로 흐르고, 상기 제4 컴포넌트의 출력이 상기 제1 컴포넌트로 흐른다.
측면 5는 측면 3 또는 4의 방법으로, 상기 제2 컴포넌트의 출력이 데이터의 제1 부분의 요약인 특정 데이터 세트를 포함한다.
측면 6은 측면 3, 4, 또는 5의 방법으로, 상기 제1 데이터 소스를 나타내는 컴포넌트는 명령을 송신하고, 상기 명령은 상기 제1 시스템이 데이터가 상기 컴퓨터 프로그램을 실행하는 시스템에 송신되도록 하기 전에 수행된다.
측면 7은 측면 1 내지 6 중 임의의 방법으로, 상기 명령은 상기 제2 집계 연산에 대응하는 커맨드를 포함하는 SQL 스테이트먼트를 포함한다.
측면 8은 측면 1 내지 7 중 임의의 방법으로, 상기 SQL 쿼리에 기초하여 상기 컴퓨터 프로그램을 생성하는 단계는 상기 SQL 쿼리에 기초하여 쿼리 플랜을 생성하는 단계; 상기 제1 데이터 소스로부터 데이터에 적용되는 제2 집계 연산을 상기 쿼리 플랜에 더하는 단계; 상기 제1 시스템이 상기 제2 집계 연산을 수행하기 위한 기능을 포함한다고 결정하는 단계; 상기 제2 집계 연산을 수행하기 위해 명령을, 상기 제1 데이터 세트를 나타내는 쿼리 플랜의 부분에 첨부하는 단계; 및 상기 쿼리 플랜에 기초하여 컴퓨터 프로그램을 생성하는 단계를 포함한다.
측면 9은 측면 1 내지 8 중 임의의 방법으로, 상기 제1 집계 연산이 최소, 최대, 합산 또는 카운트 연산이고, 상기 제2 집계 연산이 상기 제1 집계 연산과 동일한 유형의 집계 연산이다.
측면 10은 측면 1 내지 9 중 임의의 방법으로, 상기 제1 집계 연산이 평균 연산이고, 상기 제2 집계 연산이 합산 연산 또는 카운트 연산이다.
측면 11은 측면 1 내지 10 중 임의의 방법으로, 제1 집계 연산에 기초하여 제2 집계 연산을 결정하는 단계를 포함한다.
측면 12는 측면 11의 방법으로, 상기 제1 집계 연산에 기초하여 제2 집계 연산을 결정하는 단계는, 수행되었을 시, 상기 제1 집계 연산의 출력에 등가인 출력을 발생하는 일련의 연산을 결정하는 단계, 및 상기 일련의 연산으로부터 상기 제2 집계 연산을 선택하는 단계를 포함한다.
측면 13은 측면 1 내지 12 중 임의의 방법으로, 상기 제1 union 유형 연산이 상기 제2 union 유형 연산과 동일한 유형이다.
측면 14는 측면 1 내지 13 중 임의의 방법으로, 상기 제1 시스템은 그래프-기반 처리 시스템을 포함하고, 상기 제2 시스템은 상관적 데이터베이스 관리 시스템(RDBMS)을 포함한다.
독립된 또는 조합된 하나 이상의 측면은 시스템, 또는 장치, 또는 컴퓨터 시스템에 의해 실행시, 이 측면의 연산을 수행하는 머신 판독가능 명령을 포함하는 컴퓨터 프로그램 제품이 저장된 컴퓨터 판독가능 저장 디바이스로서 나타날 수 있다. 일 실시예로서, 컴퓨터 판독가능 저장 매체는, 컴퓨터 시스템에 의해 실행시, 상기 측면 1 내지 13 중 어느 하나에 따른 연산을 수행하는 머신 판독가능 명령을 포함하는 컴퓨터 프로그램 제품을 저장할 수 있다. 또 다른 실시예로서, 하나 이상의 프로세서를 포함하는 컴퓨터 시스템이 하나 이상의 프로세서에 의해 실행시, 측면 1 내지 13 중 어느 하나에 따라 연산을 수행하는 머신 판독가능 명령을 포함하는 컴퓨터 프로그램 제품이 저장된 컴퓨터-판독가능 디바이스를 포함한다.
측면이 다음의 하나 이상의 장점을 포함할 수 있다. 데이터 처리 시스템이 집계 연산을 푸시 다운하여 데이터 소스로부터 송신된 데이터의 양이 감소된다. 쿼리에 대응하는 컴퓨터 프로그램이 예컨대 컴포넌트들을 제거함으로써 단순화될 수 있다.
본원의 다른 특징 및 장점이 다음의 상세한 설명 및 특허청구범위로부터 명백해질 것이다.
도 1은 쿼리를 처리할 수 있는 데이터 처리 시스템을 도시한다.
도 2는 데이터 처리 시스템의 요소를 도시한다.
도 3 및 4는 쿼리 플랜을 도시한다.
도 5 및 6은 컴퓨터 프로그램을 도시한다.
도 7 및 8은 흐름도이다.
데이터 처리 시스템이 쿼리(예컨대 SQL 쿼리)를 데이터플로우 그래프와 같은 컴퓨터 프로그램으로 변환할 수 있다. 데이터플로우 그래프는, 실행시 쿼리의 연산과 등가인 연산(예, 데이터 처리 연산)을 수행하는 컴포넌트를 포함한다. 쿼리로부터 컴퓨터 프로그램을 생성하는 시스템은 일부 연산이 데이터 소스에 의해 수행될 수 있다는 것을 결정할 수 있다. 예를 들어, 컴퓨터 프로그램의 컴포넌트는 데이터 소스가 컴포넌트에 의해 표현된 하나 이상의 연산을 수행하도록 지시함으로써 데이터 소스에 "푸시 다운"될 수 있고, 컴포넌트는 컴퓨터 프로그램으로부터 제거될 수 있다. 예를 들어, 컴퓨터 프로그림은 데이터 소스가, SQL 스테이트먼트를 데이터 소스로 송신함으로써 연산을 수행하도록 지시할 수 있고, 이것은 데이터 소스에서 실행시, 연산을 수행한다.
SQL 쿼리(SQL 스테이트먼트라고도 함)가 구조화된 쿼리 언어(structured query language, SQL)에 의해 정의된 신택스(syntax) 및 커맨드를 사용한다. 일반적으로, 쿼리는 쿼리에서 지시되는 하나 이상의 데이터세트 내의 데이터의 서브세트를 특정하는 스테이트먼트이다. 이 특정된 서브세트는 쿼리를 발행한 시스템에 쿼리를 처리하는 시스템에 의해 복귀될 수 있다. 쿼리에 의해 특정되고 쿼리에 응답하여 복귀된 데이터는 일반적으로 쿼리에 의해 지시된 데이터세트 내에 저장된 전체 데이터의 일부이다. 일례의 SQL 쿼리가 SELECT last_name FROM current_customers"일 수 있다. 이 SQL 쿼리가 연산, SELECT를 포함하고, 이것은 쿼리를 실행하는 시스템에게 SELECT 연산의 논항(argument)에 따라 데이터를 검색하도록 지시한다. SQL의 신택스에서, 상기 논항이 데이터베이스 테이블과 같은 세트인 "current_customers", 및 데이터베이스 테이블의 컬럼인 "last_name"이다. 시스템이 쿼리를 해독하고 쿼리의 연산을 실행하는 때에, 시스템은 쿼리에 응답하여 last_name 컬럼의 데이터(예, last_name 컬럼에 포함된 데이터의 각 부분)를 복귀시킬 수 있다. SQL는 2008년 4월 7일에 발행된 ISBN 978-0470229064인 Alex Kriegel 및 Boris Trukhnov 저자의 "SQL Bible, 2nd Edition"에 자세히 기재되어 있으며, 그 내용이 본원에 원용된다.
때때로 쿼리가 둘 이상의 데이터 소스로부터 레코드의 조합으로 수행된 연산을 포함할 수 있다. 예를 들어, 쿼리는 union 유형 연산을 포함할 수 있다. union 유형 연산은 둘 이상의 데이터 소스로부터 레코드를 포함하고 데이터의 세트를 출력으로서 제공하는 데이터의 세트를 발생한다. 또 다른 방법을 보면, union 유형 연산이 둘 이상의 소스로부터 데이터를 데이터의 단일 세트로 조합한다. 용어 "union"(예, SQL에서 UNION 커맨드)은 전형적으로 출력을 제공하기 전에 데이터의 소스 둘 다에서 복제되는 데이터 요소를 제거하는 union 유형 연산이라 하고, 반면에 "union all"(예, SQL에서 UNION ALL 커맨드)는 전형적으로 출력을 제공하기 전에 데이터의 소스 둘 다에 데이터 요소가 복제되었다는 union 유형 연산을 지칭한다. 예를 들어, 두 데이터 세트가 각각 전화 번호를 포함하고 데이터의 세트 둘 다 전화 번호 "555-1212"를 나타내는 데이터의 요소를 포함한다면, "union" 연산이 전화 번호 "555-1212"를 나타내는 데이터의 하나의 요소만을 출력할 것이며, 반면에 "union all" 연산은 전화 번호 "555-1212"를 나타내는 데이터의 두 요소를 출력할 것이다.
쿼리는 또한 union 유형 연산 후에 집계 연산(aggregation operation)(예, SUM, COUNT, AVG, MIN, 또는 MAX와 같은 연산)을 포함할 수 있다. 집계 연산은 집계 함수 또는 요약 연산이라고도 하는데, 입력 데이터를 요약하는 출력 데이터를 제공하여, 출력 데이터가 전형적으로 입력 데이터보다 훨씬 작은 크기이다. 쿼리가 union 유형 연산 이후에 집계 연산을 포함한다면, 컴퓨터 프로그램을 생성하는 시스템이 union 유형 연산 전에 집계 연산을 둘 수 있으며, 데이터 소스로부터 수신된 데이터의 요약만이 집계 연산을 수행하는데 요구된다. 또한, union 유형 연산 전에 놓여진 집계 연산들은, 임의의 또는모든 소스가 집계 연산을 처음부터 지원하도록 결정되었다면, 그들과 각각 연관된 데이터 소스로 푸시 다운될 수 있다. 이는 전형적으로 데이터 소스로부터 전달된 데이터의 양을 감소시키며, 컴퓨터 프로그램은 일부 또는 모든 데이터 소스로부터 수신될 수 있는 것과 달리 데이터의 요약을 오직 수신하기 때문이다.
실제 환경 예로서, 전화 기업이 60일 동안 돌아가는 전화 호출의 레코드를 저장할 수 있다. 회사는 전화 레코드의 마지막 7일을 포함하는 데이터 저장, 및 레코드의 남아있는 53일을 포함하는 또 다른 데이터 저장을 가질 수 있다. 레코드의 모든 60일에 수행된 쿼리가 union 유형 연산을 포함할 수 있고, 집계 연산이 데이터 저장 중 하나 또는 둘 다에 푸시 다운될 수 있다. 게다가, 전화 레코드의 마지막 7일을 포함하는 데이터 저장은 상관적 데이터베이스일 수 있고, 레코드의 남아있는 53일을 포함하는 데이터 저장은 상관적 데이터베이스 외의 데이터 저장의 유형, 예컨대 플랫 파일일 수 있다. 집계 연산이 여전히 전화 레코드의 마지막 7일을 포함하는 상관적 데이터에 푸시 다운될 수 있다.
도 1은 쿼리(102)에 의해 특정된 결과(104)를 생성하는 쿼리(102)를 처리할 데이터 처리 시스템(100)을 도시한다. 결과(104)는 쿼리(102)에 의해 참조되는 데이터 소스(110, 120)로부터 수신된 데이터(106)에 기초한다. 데이터 처리 시스템(100)이 쿼리(102)에 기초하여 데이터 처리 시스템(100)가 생성되는 명령(114, 124)에 응답하여 데이터(106)를 수신한다.
쿼리(102)가 쿼리에 의해 특정되도록 결정된 데이터를 검색하도록 사용된다.
쿼리(102)의 하나의 유형이 구조화된 쿼리 언어(SQL) 쿼리이다. SQL 쿼리(SQL 스테이트먼트라고도 함)가 구조화된 쿼리 언어에 의해 정의된 신택스 및 커맨드를 사용한다. 쿼리에 응답하여 데이터를 복귀하는 소스의 일례의 유형은 상관적 데이터베이스이다. 상관적 데이터베이스는 하나 이상의 데이터베이스의 집합 및 데이터 처리 연산 예컨대 SQL 쿼리 해독, 테이블로부터 데이터 판독, 테이블에 데이터 기록, 및 다른 종류의 데이터 처리 함수 수행을 관리하는 시스템이다. 데이터베이스 테이블은 a) 레코드를 나타내는 각 로우 및 b) 로우에 저장된 데이터의 카테고리를 각각 나타내는 컬럼으로 배열된 데이터의 집합이다. 예를 들어, "current_customers"라 하는 데이터베이스 테이블은 비즈니스의 현재 고객을 각각 나타내는 로우를 가질 수 있고, 고객의 이름, 고객의 주소, 고객에 의해 구입된 마지막 제품 등의 카테고리를 나타내는 컬럼을 가질 수 있다.
데이터 소스(110, 120)는 데이터 처리 시스템(100) 외부에 있다. 데이터 처리 시스템(100)의 외부라는 것은, 리소스가 데이터 처리 시스템(100)의 컴포넌트들 중 하나가 아니라는 것을 의미한다(데이터 처리 시스템(100)의 몇몇 컴포넌트는 도 2에 자세히 도시됨). 예를 들어, 데이터 소스(110, 120)는 네트워크(예, 인터넷)를 사용하여 통신하는 설비일 수 있다. 데이터 처리 시스템(100)은 데이터를 네트워크에 전송하고, 데이터를 네트워크로부터 수신함으로써, 데이터 소스(110, 120)와 통신한다.
도면에 도시된 것처럼, 데이터 처리 시스템(100)이 다수의 데이터 소스(110, 120)에 대한 참조(101, 103)를 포함하는 쿼리(102)를 수신할 수 있다. 데이터 소스(110, 120)는 데이터의 하나 이상의 세트를 각각 포함한다. 예를 들어, 데이터 소스(110, 120)는 데이터베이스 테이블, 데이터 파일, 또는 저장 매체, 예컨대 유형의 비일시적 컴퓨터-판독가능 매체에 저장된 다른 데이터 구조와 같은 데이터의 세트를 포함할 수 있다.
또한, 데이터 소스는 데이터 소스와 연관된 시스템에 의해 전형적으로 관리된다. 예를 들어, 데이터 소스가 데이터베이스 테이블(또는 데이터베이스 테이블의 집합)을 포함하는 상관적 데이터베이스이라면, 상관적 데이터베이스가 상관적 데이터베이스 관리 시스템(relational database management system, RDBMS)에 의해 관리될 수 있다. 참조(101, 103)가 데이터 소스를 식별하는 임의의 정보일 수 있다. 일부 실시예에서, 참조(101, 103)가 데이터 소스(110, 120)의 알파뉴메릭 "names"이다.
상관적 데이터베이스 관리 시스템(RDBMS)은 상관적 데이터베이스에 저장된 데이터를 생성하고 변경하도록 지향하는 명령을 처리하는 시스템이다. RDBMS가 쿼리를 해독하고 쿼리에 의해 특정 데이터를 복귀시키기 위한 기능을 포함한다. 쿼리 해독 및 쿼리에 의해 특정 데이터의 복귀의 조합은 쿼리 실행으로 지칭되기도 한다. 예를 들어, 일부 RDBMS 구현예가 a) SQL 쿼리를 파싱하고, b) 구조화된 쿼리 언어에 의해 정의되는 연산을 식별하고, c) 커맨드의 논항을 식별하고, d) 논항에 따라 연산을 수행하는(예, 실행하는) 엔진을 포함한다.
전술한 것처럼, SQL 쿼리 "SELECT last_name FROM current_customers"는 연산 SELECT를 포함하고, 이는 RDBMS가 SELECT 연산의 논항에 따라 데이터를 검색하도록 지시한다. 상기 논항은, RDBMS에 의해 관리된 데이터베이스 테이블인 "current_customers", 및 데이터베이스 테이블의 컬럼인 "last_name"이다. RDBMS가 쿼리를 해독하고 쿼리의 연산을 실행하는 때에, RDBMS는 쿼리에 응답하여 last_name 컬럼의 데이터(예, last_name 컬럼에 포함된 데이터의 각 부분)을 복귀시킬 것이다.
데이터 처리 시스템(100)은 쿼리(102)에 기초하여 컴퓨터 프로그램(108)(데이터 처리 프로그램이라고도 함)을 생성한다. 예를 들어, 컴퓨터 프로그램(108)이 쿼리를 입력으로서 취하고 데이터플로우 그래프를 출력으로서 생성하는 엔진(예, 데이터 처리 시스템(100)의 서브시스템을 형성하는 엔진)을 사용하여 생성될 수 있다. 데이터플로우 그래프가 본원에 실시예로서 사용된다 할지라도, 컴퓨터 프로그램이 프로그램 코드에 의해 표현되는 명령을 수행하도록 실행될 수 있는 프로그램 코드를 포함하는 임의의 종류의 프로그램일 수 있다.
이 방법으로, 컴퓨터 프로그램 예컨대 도 1에 도시된 컴퓨터 프로그램(108)이, 실행시, 예컨대 RDBMS와 같은 데이터베이스 관리 시스템에 의해, 대응하는 쿼리(102)의 실행으로서 동일한 출력을 생성할 수 있다. 따라서, 쿼리(102)가 SQL와 같은 쿼리 언어를 사용하여 기록될 수 있다. 그러나, 시스템, 예컨대 대응하는 데이터 처리 연산을 수행하는, 데이터 처리 시스템(100)의 서브시스템이 컴퓨터 프로그램(108)을 실행하여, 쿼리(102)를 실행했으나 컴퓨터 프로그램(108)을 실행하지 않은 시스템(예, RDBMS)에 의해 수행될 수 있는 연산과 등가인 연산을 수행한다. 여기서, 두 연산이 등가라는 것은, 두 연산이, 동일한 입력 데이터로 제공된 경우에 실질적으로 동일한 출력 데이터를 생성한다는 것을 의미한다. 실시예로서, 두 연산이 동일한 입력 데이터로 제공되는 경우에 정확히 동일한 출력 데이터를 생성한다. 실시예로서, 동일한 입력 데이터로 제공된 두 연산이 데이터 포맷만이 오직 상이한 출력 데이터를 생성할 수 있고, 예를 들어, 하나의 연산이 콤마로 구분된(comma-delimited) 출력 데이터를 생성할 수 있고, 등가인 연산이 콤마로 구분된 출력 데이터와 동일하지 않다면 탭으로 구분된(tab-delimited) 출력 데이터를 생성한다.
일부 실시예에서, 몇몇의 쿼리(102)의 연산이 컴퓨터 프로그램(108)에 의해 수행될 수 있고, 몇몇의 쿼리(102)의 연산이 데이터 소스(110, 120)에 푸시 다운될 수 있다. 이것은 데이터 처리 시스템(100)이 데이터 소스(110, 120)를 관리하는 시스템(112, 122) 중 하나 이상에 의해 수행될 수 있는 쿼리(102) 내의 연산을 식별한다. 데이터 처리 시스템(100)이, 시스템(112, 122)에 의해 실행시, 시스템(112, 122)으로 하여금 데이터 처리 시스템(100)에 의해 식별된 연산과 등가인 연산을 수행하도록 하는, 명령(114, 124)을 생성할 수 있다. 컴퓨터 프로그램(108)이 명령(114, 124)을 시스템(112, 122)에, 컴퓨터 프로그램(108)이 실행시, 송신하도록 구성될 수 있다. 명령(114, 124)을 시스템(112, 122)에 의해 실행될 수 있는 임의의 포맷의 명령일 수 있다.
일부 실시예에서, 데이터 소스(110, 120)의 각 역량이 데이터 소스(110, 120)의 공지된 특성에 기초하여 데이터 처리 시스템(100)에 공지된다. 예를 들어, 데이터 처리 시스템(100)이 SQL 스테이트먼트를사용하여 데이터 소스 중 하나(110)와 통신하면, 그 후 데이터 소스(110)가 SQL 스테이트먼트를 처리할 수 있다는 것이 데이터 처리 시스템(100)에 이미 공지된다. 이 정보로, 데이터 처리 시스템(100)이 SQL 스테이트먼트로서 표현될 수 있는 다른 연산을 식별하고, 따라서 데이터 소스(110)에 푸시 다운 될 수 있다.
일부 실시예에서, 푸시 다운되는 연산이 집계 연산(105)이다. 집계 연산(105)이 데이터에서 취해지고 데이터의 요약을 생성하기 때문에, 집계 연산(105)은 전형적으로 그것의 입력 데이터와 관련하여 적은 양의 출력 데이터를 생성한다. 이러한 이유로, 집계 연산(105)에 대응하는 연산이 데이터 소스(110, 120)를 관리하는 시스템(112, 122)에 의해 수행되기에 일반적으로 더욱 효율적이다. 이러한 이유로, 데이터 처리 시스템(100)은 데이터 소스(110, 120)의 각각으로부터 요약 데이터(116, 126)를 오직 수신한다. 요약 데이터(116, 126)는 전형적으로, 집계 연산(105)에 대응되는 연산이 데이터 처리 시스템(100)에서 실행되는 컴퓨터 프로그램(108)에 의해 수행되었다면 데이터 소스(110, 120)로부터 송신될 수 있는 데이터(106)보다 적은 양이다. 또한, 집계 연산은 일반적으로 SQL 스테이트먼트 또는 SQL 스테이트먼트의 부분으로 표현될 수 있고, 따라서 SQL 스테이트먼트를 처리할 수 있는 시스템(예, RDBMS)에 푸시 다운될 수 있는 연산의 실시예이다. 이러한 방법으로, 각 데이터 소스(110, 120)로부터 복귀되는 데이터(106)가, 데이터의 부분(예, 쿼리(102)에 의해 특정 데이터의 다른 몸체의 부분 또는 데이터베이스테이블의 부분) 그 자체가 아닌, 각 데이터 소스에 저장된 데이터의 부분의 요약이다.
집계 연산(105)은 union 유형 연산이 쿼리(102) 내의 집계 연산(105)에 선행한다 할지라도 푸시 다운될 수 있고, 도 3 및 4에 자세히 도시된다.
도 2는 쿼리(102)를 해독하고 쿼리(102)에 대응하는 컴퓨터 프로그램(108)을 생성하도록 사용될 수 있는 데이터 처리 시스템(100)의 요소들을 도시한다.
쿼리(102)가 쿼리(102)에 대응하는 쿼리 플랜(132)을 생성하는 쿼리 플래너(130)에 의해 수신된다. 예를 들어, 데이터 처리 시스템(100)이 쿼리(102)를 쿼리 플래너(130)에 제공할 수 있다. 쿼리 플랜이 쿼리가 실행되면 수행될 수 있는 연산(예, 데이터 처리 연산)의 기술이다. 예를 들어, 연산이 예를 들어 데이터베이스 관리 시스템에 의해 수행된 데이터베이스 연산일 수 있다. 연산은 또한 다른 형태를 취할 수 있다. 데이터베이스 연산은 데이터베이스 함수 또는 데이터베이스 태스크라 지칭될 수도 있다.
연산의 다른 배열이나 다른 세트가 동일한 결과를 완수할 수 있다 할지라도, 쿼리 플랜이 연산들의 하나의 가능한 배열을 기술할 수 있다. 쿼리 플래너는 쿼리에 의해 사용된 데이터 소스에 대한정보 및 쿼리에 대한 정보에 기초하여 쿼리 플랜을 생성할 수 있는 시스템이다.
일부 배열에서, 연산이 등가인 출력을 제공하는 한편, 다양한 순서로 실행될 수 있다. 이로써, 쿼리 플레너가 최적의 쿼리 플랜을 결정하는 기능을 가질 수 있다. 예를 들어, 최적의 쿼리 플랜이 최소한의 시간에 쿼리를 실행하거나, 데이터 저장 공간과 같이 데이터베이스 리소스의 최소한의 양을 사용하거나, 그렇지 않으면 데이터베이스 시스템에 의해 식별되었던 제한사항 내에 쿼리를 수행하기 위한 연산을 배열을 기재하는 쿼리 플랜일 수 있다. 최적의 쿼리 플랜을 결정하기 위한 쿼리 플래너의 기능은 다수의 가능한 쿼리 플랜을 점수 매기고 랭킹 매기는 기능을 포함할 수 있고, 최적이거나 효율적인 구성으로 가능한 쿼리 플랜을 재배열하는 기능도 포함할 수 있다.
단일의 쿼리가 여러 번 실행될 수 있고, 각 실행이 고유한 최적의 플랜을 가질 수 있다. 예를 들어, 데이터베이스 테이블 내의 데이터는 쿼리의 두 실행 사이에서 변화할 수 있다. 이 실시예에서, 쿼리의 제1 실행을 위해 생성되었던 쿼리 플랜에 기술된 연산이 제1 실행 동안보다 쿼리의 제2 실행 동안 많은 또는 적은 실행 시간을 요구할 수 있다. 이 경우에, 연산의 다른 배열이 쿼리의 제2 실행 예컨대 동일한 연산의 다른 배열, 또는 다른 연산의 배열에 더 적합할 수 있다. 쿼리의 제2 실행에 최적화된 쿼리 플랜이 데이터베이스 테이블의 순간적 상태를 고려하여, 실행하기 위해 생성될 수 있다.
쿼리 플랜(132)이 프로그램 생성 엔진(140)에 의해 수신된다. 컴퓨터 프로그램 생성 엔진(140)이, 실행시 쿼리(102)에 대응하는 연산을 수행하는 컴퓨터 프로그램(108)을 생성한다. 예를 들어, 쿼리(102)가 구조화된 쿼리 언어에 의해 정의된 하나 이상의 연산 및 상기 연산과 연관된 논항을 포함한다. 이 실시예에서, 컴퓨터 프로그램(108)이 SQL 쿼리의 연산과 등가이고, 컴퓨터 프로그램(108)이 실행시 동일한 논항에 기초하여 컴퓨터 프로그램(108)이 실행되는 실행가능한 기능을 포함한다.
컴퓨터 프로그램 생성 엔진(140)이 쿼리 플랜(132)을 분석하여, 쿼리 플랜(132)에 의해 표현된 연산이 컴퓨터 프로그램(108)이 생성되기 전에 변경되어야 하는지 여부를 결정한다. 컴퓨터 프로그램(108)이 쿼리 플랜(132)에 기초하여 생성되기 때문에, 컴퓨터 프로그램 생성 엔진(140)이 분석의 결과를 사용하여, 컴퓨터 프로그램(108)의 생성으로 진행되기 전에 쿼리 플랜(132)을 변경한다. 예를 들어, 쿼리 플랜(132)은 union 유형 연산 다음에 집계 연산을 포함할 수 있다. 그렇다면, 컴퓨터 프로그램 생성 엔진(140)이 쿼리 플랜(132)을 변경시켜, union 유형 연산 전에 집계 연산을 위치시킬 수도 있다. 이것은 도 3 및 4에 자세히 도시된다.
컴퓨터 프로그램 생성 엔진(140)이 컴퓨터 프로그램을 생성하는 때에, 컴퓨터 프로그램 생성 엔진(140)이 데이터 소스로의 푸시-다운을 위한 후보로서 집계 연산을 식별할 수 있고, 이들이 데이터 소스로부터 직접 수신된 데이터에서 수행되기 때문이다(예, 데이터가 집계 연산 이전의 임의의 연산의 대상이 아님). 컴퓨터 프로그램 생성 엔진(140)이 그 후 데이터 소스(110, 120)를 관리하는 시스템(112, 122) 중 하나 또는 둘 다가 집계 연산에 등가인 연산을 수행할 수 있는지 여부를 결정할 수 있다. 제1 시스템(112)이 집계 연산에 등가인 연산을 수행할 수 있다면, 컴퓨터 프로그램 생성 엔진(140)이 컴퓨터 프로그램(108)은 제1 시스템(112)이 집계 연산에 등가인 연산을 수행하고 컴퓨터 프로그램에 요약 데이터를 복귀시키도록 지시하는 명령(114)을 제1 시스템(112)에게 송신하도록 구성된다. 제2 시스템(122)이 집계 연산과 등가인 연산을 수행할 수 있다면, 컴퓨터 프로그램 생성 엔진(140)은 제2 시스템(122)이 집계 연산에 등가인 연산을 수행하고 컴퓨터 프로그램에 요약 데이터를 복귀하도록 지시하는 명령(124)을 제2 시스템(122)에게 송신하도록 구성된다.
일부 구현예에서, 컴퓨터 프로그램(108)이 데이터플로우 그래프(142)를 포함한다. 데이터플로우 그래프는 입력 데이터에서 수행되는 연산을 나타내는 컴포넌트 및 데이터의 플로우를 나타내는 컴포넌트 간의 링크(노드라고도 함)를 포함하는 컴퓨터 프로그램이다. 컴포넌트에 의해 표현된 연산은 입력 데이터를 처리함으로써 입력 데이터에 기초하여 출력 데이터를 생성한다. 컴포넌트가 다른 컴포넌트와 링크되어 있다면, 컴포넌트는 다른 컴포넌트에 입력 데이터를 제공하고 다른 컴포넌트로부터 입력 데이터를 수신하며, 여기서 두 컴포넌트 사이의 각 링크는 컴포넌트들 중 하나로부터 다른 컴포넌트로의 플로우를 나타낸다. 그래프의 컴포넌트들의 서브세트(예, 그래프의 하나 이상의 컴포넌트)는 그래프의 서브그래프라고도 한다. 데이터플로우 그래프가 그래프-기반 처리 시스템에 의해 실행되는 때에, 각 컴포넌트는 실행되고, 예컨대 컴퓨터 프로그램 또는 컴퓨터 프로그램의 부분이 실행되고 컴포넌트에 의해 표현된 연산을 수행한다. 실행 동안 데이터플로우 그래프는 처리되어(예, 데이터플로우 그래프의 컴포넌트의 연산에 의해 작동되어) 출력 데이터를 생성하는 입력 데이터를 수신한다. 일부 실시예에서, 데이터플로우 그래프의 일부 컴포넌트 또는 모든 컴포넌트는 컴포넌트와 연관된 연산을 수행하도록 실행가능한 프로그램 코드를 호출하기 위해 정보와 각각 연관된다. 예를 들어, 컴포넌트는 컴포넌트와 연관된 연산을 수행하기 위한, 예컨대 데이터를 처리하고 출력하기 위한 컴퓨터-실행가능한 명령을 포함하는 컴퓨터-판독가능 저장소에 참조와 연관될 수 있다. 일부 실시예에서, 데이터플로우 그래프의 일부 컴포넌트 또는 모든 컴포넌트가 프로그램 코드에 이용가능한 데이터를 만들기 위해 정보와 각각 연관된다. 예를 들어, 컴포넌트는 컴포넌트와 연관된 실행가능한 프로그램에 데이터를 전달하도록 호출될 수 있는 기능 호출(function call)과 연관될 수 있고, 또는 컴포넌트는 컴포넌트와 연관된 실행가능한 프로그램에 전달되는 데이터를 수신할 수 있는 네트워크 포트와 연관될 수 있고, 또는 컴포넌트는 컴포넌트와 연관된 실행가능한 프로그램에 데이터를 전달하기 위해 또 다른 기술과 연관될 수 있다. 이 방법으로, 각 컴포넌트는 데이터를 수신하고, 처리하고, 출력한다.
그래프-기반 시스템의 일 실시예는 발명의 명칭이 "그래프-기판 어플리케이션을 위한 파라미터의 관리"인 미국특허공개 제2007/0011668호에 자세히 기술되며, 그 내용은 본원에 원용된다. 그래프-기반 계산을 실행하는 시스템이 발명의 명칭이 "그래프로 표현된 계산의 실행"인 미국특허 제5,966,072호에 기술되고, 그 내용은 본원에 원용된다. 또한, 데이터플로우 그래프의 컴포넌트가 쿼리(102)의 연산을 위해 대체될 수 있다. 이 대체에 따른 기술은 발명이 명칭이 "데이터 쿼리 관리"인 미국특허공개 제2011/0179014A1호 및 발명의 명칭이 또한 "데이터 쿼리 관리"인 미국특허공개 제2012/0284255A1호에 추가로 기술되며, 그 내용은 본원에 원용된다. 일부 구현예에서, 데이터플로우 그래프는 쿼리(102)로부터 생성될 수 있다.
일부 구현예에서, 컴퓨터 프로그램(108)이 파라미터로 구성될 수 있다. 예를 들어, 파라미터는 프로그램의 행동을 변화시키도록 변경될 수 있는 값일 수 있다. 특정 실시예에서, 파라미터는 "파일이름"일 수 있고, 그 파라미터의 값은 파일 시스템 내의 파일의 위치일 수 있다. 파라미터의 값은 프로그램이 상이한 파일에 액세스하도록 구성되는 상이한 파일의 위치로 변경될 수 있다. 동일한 프로그램의 두 인스턴스가, 동일한 프로그램의 두 인스턴스의 행동을 변경할, 상이한 파라미터 값으로 구성될 수 있다.
실행 엔진(150)이 컴퓨터 프로그램(108)을 수신한다. 실행 엔진(150)이 그 후 컴퓨터 프로그램(108)을 실행하고, 예컨대 컴퓨터 프로그램(108)과 연관된 프로그램 코드에 의해 특정된 명령을 수행한다. 실행시, 컴퓨터 프로그램(108)이 명령(114, 124)을 생성하고 명령(114, 124)을 데이터 소스(110, 120)를 관리하는 시스템(112, 122)에 송신된다.
일부 구현예에서, 예컨대 컴퓨터 프로그램(108)이 데이터플로우 그래프이면, 실행 엔진(150)이 특정된 연산 시스템을 포함하며, 그래프 연산 시스템이라고도 한다. 그래프 연산 시스템은 데이터플로우 그래프의 개별적인 컴포넌트에 기본이 되는 연산을 실행할 수 있는 컴퓨터 프로그램이다. 예를 들어, 데이터플로우 그래프의 컴포넌트가 데이터 처리 시스템에 의해 수행되는 연산을 나타내면, 그래프 연산 시스템이 데이터 처리 시스템이 그 연산을 수행하도록 지시하도록 맡겨진다.
명령(114, 124)을 데이터 소스(110, 120)을관리하는 시스템(112, 122)에게 전달한 후에, 컴퓨터 프로그램(108)은 데이터 소스(110, 120)로부터 요약 데이터(116, 126)를 수신한다. 실행 엔진(150)이 그 후 쿼리(102)의 결과(104)를 생성하는 컴퓨터 프로그램(108)의 실행에서 요약 데이터(116, 126)를 사용한다. 이 방법으로, 데이터 처리 시스템(100)이 쿼리에 의해 특정된 결과(104)를 생성하도록 쿼리(102)를 실행할 수 있다.
도 3은 SQL에 기록된 쿼리(200) 및 쿼리를 나타내는 쿼리 플랜(210)의 화보형(pictorial) 표현을 도시한다. 예를 들어, 쿼리(200)는 도 2의 쿼리 플랜(132)의 실시예일 수 있다. 쿼리(200)는 "보스턴" 및 "뉴욕"이라 불리는 두 데이터 소스(예, 상관적 데이터베이스 테이블)에서 발견되는 "가격"이라는 컬럼의 최대값을 계산하도록 사용된다. 두 데이터 소스는 쿼리(200) 내의 논항(202, 204)에 의해 식별된다. 쿼리(200)는 또한 "GROUP BY hotel_chain"라는 연산을 위해 호출되어 수행될 수 있고, 출력의 컬럼들 중의 하나에 따라 출력의 데이터를 그룹핑하며, 여기서는 호텔_체인 컬럼이다. 실제 환경 실시예에서, 이 쿼리는 호텔의 보스톤 데이터베이스 및 호텔의 뉴욕 데이터베이스 둘 다에 기록된 호텔룸의 최대("max") 가격을 획득하도록 사용될 수 있다. 쿼리가 실행되는 때에, 두 데이터 소스로부터의 데이터는 통합되고(예컨대, 조합되고) 호텔 체인에 의해 그룹핑된다. 그 후, 각 호텔 체인에 대한 호텔 룸의 최대 가격이 식별되고 복귀된다.
쿼리 플랜(210)은 두 데이터 소스(212, 214)의 식별을 포함하고, 각 데이터 소스는 union 유형 연산(216)에 의해 조합되는 데이터를 제공한다. 예를 들어, union 유형 연산(216)이 SQL 쿼리(200)에 특정된 연산에 따라, "union" 또는 "union all"에 등가일 수 있다. 여기서, "union" 연산(예, UNION 커맨드)가 SQL 쿼리(200) 내에 특정된다.
union 유형 연산(216)의 출력이, 예컨대 호텔_체인 컬럼에 의해 데이터를 그룹핑함으로써, 데이터를 처리하는 GROUP BY 연산(217)에 제공된다. 처리된 데이터가 입력 데이터의 최대 값을 결정하는 롤업 연산(218)에 통과된다. 최대 값은 쿼리(200)의 결과이다.
도 4는 쿼리 플랜(210a)의 또 다른 버전을 도시한다. 이 버전의 쿼리 플랜(210a)이 변경되었으며, 예컨대 도 2의 컴퓨터 프로그램 생성 엔진(140)에 의해 변경되었다(일부 실시예에서, 쿼리 플랜(132)이 생성 엔진(140)에 제공되기 전에 쿼리 플래너(130)에서 변경이 수행된다). 이 버전의 쿼리 플랜(210a)에서, 롤업 연산(218a)이 제1 데이터 소스(212)와 union 유형 연산(216) 사이에 위치되어 있었으며, 또 다른 롤업 연산(218b)이 제2 데이터 소스(214)와 연산(216) 사이에 위치되어 있었다. 쿼리 플랜(210a)의 배열이 도 3의 배열에서 쿼리 플랜(210)으로서 동일한 출력을 제공할 것이다. 또한, 데이터 소스(212, 214) 중 어느 하나가 롤업 연산(218a, 218b)과 등가인 연산을 수행할 수 있다면, 각 롤업 연산(218a, 218b)이 대응하는 데이터 소스(212, 214)에 푸시 다운될 수 있다.
이 버전의 쿼리 플랜(210a)이 union 유형 연산 이후에 추가의 롤업 연산(219)를 포함한다. 롤업 연산(218a, 218b ) 각각이 "max"(최대) 연산을 나타내기 때문에, union 유형 연산 출력의 최대가 union 유형 연산에 의해 출력된 두 값(예, 롤업 연산(218a, 218b)에 의해 복귀된 두 값) 간의 최대 값을 식별하도록 결정되어야만 한다. 따라서, 롤업 연산(219)이, 도 3의 union 유형 연산(216) 및 GROUP BY 연산(217)의 출력에서 롤업 연산(218)이 연산하는 것처럼, union 유형 연산(216) 및 GROUP BY 연산(217)의 출력에서 연산한다. 그러나, 도 4의 이러한 롤업 연산(219)은 도 3의 이 위치에서의 롤업 연산(218)과 비교하여 매우 작은 양의 데이터로 연산한다.
도 4에 도시된 쿼리 플랜(210a)이 집계 연산의 성질에 기초하여 생성될 수 있다. 예를 들어, 다음은 집계 연산의 일부 성질이며, MIN(최소 데이터 값), MAX(최대 데이터 값), SUM(데이터 값의 합산), COUNT(레코드의 수), 및 AVG(데이터 값의 평균)을 포함한다. 이러한 성질의 각각은 집계 연산을 포함하는 식, 및 일련으로 수행된 다수의 집계 연산을 포함하는 등가의 식을 표현한다. 이러한 성질의 몇몇은 분배적 성질의 어플리케이션을 포함하고, 여기서 함수 f로 주어진, 식 f(X, Y)이 식 f(f(X), f(Y))와 등가이다. 일반적으로, 집계 연산이 이러한 성질에 따라 일련의 집계 연산으로 변환될 수 있고, 그 후 일련의 연산의 일부가 시스템에 "푸시 다운"될 수 있다.
성질 1: AGG(X UNION ALL Y) = AGG(AGG(X) UNION ALL AGG(Y)) [여기서 AGG는 MIN, MAX, 또는 SUM 중 하나임]
성질 2: COUNT(X UNION ALL Y) = SUM(COUNT (X) UNION ALL COUNT (Y))
성질 3: AVG(X UNION ALL Y) = SUM(X UNION ALL Y) / COUNT(X UNION ALL Y) = SUM(SUM(X) UNION ALL SUM(Y)) / SUM(COUNT(X) UNION ALL COUNT(Y))
성질 4: AGG(X UNION Y) = AGG(AGG(X) UNION AGG(Y)) [여기서 AGG는 MIN 또는 MAX 중 하나임]
다음의 의사코드(pseudocode)는 그 다음이 union 유형 연산인 각각의 하나 이상의 집계 연산을 푸시 다운하도록 쿼리 플랜을 변경하기 위한 기술을 표시한다.
범위 및 서브쿼리의 범위 테이블을 가진 쿼리 플랜을 고려하면, 각 서브쿼리는 타겟 엔트리 식(target entry expression)의 타겟 리스트를 정의함:
상부 레벨로부터 시작하는 쿼리에서 각 서브쿼리를 가로지름.
각 서브쿼리에 대하여 다음의 체크 및 변형을 수행함:
쿼리가 비어있지 않은 union 파라미터를 가진 서브쿼리 유형의 단지 하나의 범위 테이블을 가지는지 여부를 체크함. 그렇지 않으면 다음 서브쿼리로 이동함.
쿼리 타겟 리스트 내의 각 타겟 엔트리에 대하여:
타겟 엔트리가 집계 커맨드를 가지는지 체크함. 그렇지 않으면 다음 타겟 엔트리로 이동함.
((SUM, COUNT, AVG) 및 UNION ALL에서 집계 커맨드) 또는 ((MIN, MAX) 및 UNION에서 집계 커맨드) 여부를 체크함. 그렇지 않으면 다음 서브쿼리로 이동함.
쿼리 범위 테이블 내의 서브쿼리의 변형.
서브쿼리 내의 각 범위 테이블에 대하여:
새로운 서브쿼리를 생성하고 새로운 서브쿼리의 범위 테이블 리스트에 범위 테이블을 카피함.
쿼리 타겟 리스트 및 그룹 조항(group clause)을 새로운 서브쿼리의 타겟 리스트 및 그룹 조항에 카피함.
타겟 리스트가 AVG 함수를 가지는지 여부를 체크. 그렇다면, 각 AVG() 함수에 대한 SUM() 및 COUNT() 함수를 타겟 리스트에 더함.
범위 테이블을 새로운 서브쿼리로 대체함.
쿼리 타겟 리스트 내의 각 타겟 엔트리에 대하여:
타겟 리스트가 AVG 함수를 가지는지 여부 체크함. 각 AVG()를 대응하는 새로운 형태의 SUM()/COUNT()로 대체함.
도 5는 쿼리 플랜(210a)으로부터 생성된 컴퓨터 프로그램(300)을 도시한다. 이 컴퓨터 프로그램(300)이 도 1 및 2에 도시된 컴퓨터 프로그램(108)의 실시예일 수 있다. 이 컴퓨터 프로그래(300)은 데이터의 플로우를 표현하는 링크에 의해 연결도니 컴포넌트들을 포함하는 데이터플로우 그래프이고, 도 2의 데이터플로우 그래프(132)의 예일 수도 있다.
컴퓨터 프로그램(300)이 실행가능한 코드를 나타내는 컴포넌트들(예, 하나 이상의 실행가능한 연산)을 포함한다. 컴퓨터 프로그램(300)이 제1 데이터 소스(212)의 출력 데이터를 나타내는 컴포넌트(302) 및 제2 데이터 소스(214)의 출력 데이터를 나타내는 컴포넌트(304)를 포함한다. 두 컴포넌트(302, 304)가 union 유형 연산(216)을 나타내는 컴포넌트(306)에 링크된다. 일부 구현예에서, 컴포넌트(306)가 서브그래프와 같은 다수의 컴포넌트의 조합일 수 있다. 이 컴포넌트(306)가 롤업 연산(219) 및 GROUP BY 연산(217)을 함께 나타내는 컴포넌트(308)에 링크된다. 컴퓨터 프로그램(300)이 실행시, 컴퓨터 프로그램(300)의 출력이 도 3의 SQL에 기록된 쿼리(200)를 실행하는 시스템의 출력과 등가이다.
데이터 소스의 출력 데이터를 나타내는 각각의 컴포넌트(302, 304)가 그들의 대응하는 데이터 소스에 명령을 송신하도록 구성되었다. 예를 들어, 보스턴 데이터 소스(212)의 출력 데이터를 나타내는 컴포넌트(302)는 보스턴 데이터 소스(212)를 관리하는 시스템(예, 보스턴 데이터 소스(212)에 저장된 데이터 세트를 관리하는 시스템)에 송신 시, 도 4의 롤업 연산(218a)에 의해 표현된 요약 연산에 등가인 연산을 수행하는 명령으로 구성되었다. 이 연산은 임의의 데이터가 컴퓨터 프로그램(300)에 의해 수신되기 전에 수행된다. 일부 구현예에서, 컴포넌트(302)가 보스턴 데이터 소스(212)를 관리하는 시스템에 SQL 쿼리를 송신할 수 있다. 여기서, SQL 쿼리가 보스턴 데이터 소스(212)에 저장된 데이터베이스 테이블의 "가격" 컬럼의 최대를 특정할 수 있다. 상기 명령은 SQL 스테이트먼트, 예를 들어, "SELECT max(price), hotel_chain FROM Boston GROUP BY hotel_chain"일 수 있다. 이 방법으로, 롤업 연산(218a)이 보스턴 데이터 소스(212)에 푸시 다운 되었었다.
이 실시예에서, 집계 연산이 보스턴 데이터 소스(212)와 뉴욕 데이터 소스(214) 둘 다에 푸시 다운 되었다. 따라서, 보스턴 데이터 소스(212) 및 뉴욕 데이터 소스(214)를 관리하는 시스템이 집계 연산에 등가인 연산을 수행할 수 있다고 결정되었다. 일부 구현예에서, 이 결정이 도 2의 컴퓨터 프로그램 생성 엔진(140)에 의해 이루어지고, 컴퓨터 프로그램 생성 엔진(140)이 컴퓨터 프로그램(300)을 생성하는 때에 이 결정을 사용한다. 일부 구현예에서, 이 결정은 도 2의 쿼리 플래너(130)에 의해 이루어지고, 쿼리 플랜(132)이 집계 연산의 푸시-다운을 통합하도록 쿼리 플래너(130)에 의해 변경된다. 이 구현예에서, 컴퓨터 프로그램 생성 엔진(140)이 쿼리 플랜(132)으로부터 컴퓨터 프로그램(300)을 생성할 수 있고, 쿼리 플랜(132)에 식별된 데이터 소스를 관리하는 시스템의 역량을 평가할 필요가 없다.
일부 실시예에서, 데이터 소스의 적어도 하나는 집계 연산과 등가인 연산을 수행할 수 없다. 도 6은 쿼리 플랜(210a)으로부터 생성된 컴퓨터 프로그램(300a)의 예이다. 이 실시예에서, 보스턴 데이터 소스(212)를 관리하는 시스템이 집계 연산에 등가인 연산을 수행할 수 있다고 결정되었다. 그러나, 뉴욕 데이터 소스(214)를 관리하는 시스템이 집계 연산과 등가인 연산을 수행할 수 없다고 결정되었다. 따라서, 이 컴퓨터 프로그램(300a)에서, 뉴욕 데이터 소스(214)의 출력을 나타내는 컴포넌트(304)가 롤업 컴포넌트(305)에 링크되고, 이것이 union 유형 연산을 나타내는 컴포넌트(306)에 링크된다. 여기서, MAX 연산이 뉴욕 데이터 소스(214)에 푸시 다운될 수 없기 때문에, 대신에 롤업 컴포넌트(305)에서 연산이 수행된다. 보스턴 데이터 소스(214)의 출력을 나타내는 컴포넌트(302)는 보스턴 데이터 소스(214)에 쿼리 플랜(210)으로부터 집계 연산(218a)과 등가인 연산을 수행하도록 명령을 전달하도록 구성되고, 따라서 보스턴 데이터 소스(214)의 출력을 나타내는 컴포넌트(302)가 union 유형 연산을 나타내는 컴포넌트(306)에 링크된다. 이 방법으로, 다른 데이터 소스가 연산을 지원하지 않는다 할지라도, 집계 연산이 일부 데이터 소스로 푸시 다운 될 수 있다.
도 7은 SQL 쿼리에 기초하여 컴퓨터 프로그램을 생성하기 위해 절차(400)를 나타내는 흐름도를 도시한다. 절차(400)는 도 1의 데이터 처리 시스템(100)의 컴포넌트에 의해 수행될 수 있다.
절차는 SQL 쿼리를 수신한다(402). 예를 들어, SQL 쿼리가 도 1의 쿼리(102)의 실시예일 수 있다. 일부 실시예에서, SQL 쿼리가 데이터 처리 시스템의 외부에 있는 하나 이상의 데이터 세트에 대한 참조를 포함할 수 있다. 예를 들어, 쿼리는 제1 데이터 소스에 저장된 제1 데이터 세트에 대한 참조, 및 제1 데이터 소스와 상이한 제2 데이터 소스에 저장된 제2 데이터 세트에 대한 참조를 포함할 수 있다. 예를 들어, 데이터 소스는 상관적 데이터베이스(예, 상관적 데이터베이스 테이블을 저장함), 데이터 저장소에 액세스 가능한 플랫 파일, 네트워크를 통해 액세스 가능한 데이터 스트림, HDFS(Hadoop Distributed File System) 파일, 또는 다른 종류의 데이터 소스일 수 있다. 도 1의 데이터 소스(110, 120)는 데이터 소스의 예시이고, 데이터 세트는 데이터 소스(110, 120)에 저장된 데이터일 수 있다. 참조의 예는 도 3의 논항(202, 204)이다.
절차는 SQL 쿼리가 둘 이상의 커맨드를 포함한다는 것을 결정하고(404), 커맨드는 제1 union 유형 연산 및 제1 집계 연산을 포함한다. 일부 구현예에서, union 유형 연산이 제1 데이터 소스로부터 수신된 데이터에 기초하여 데이터의 제1 부분에 적용되고, 또한 제2 데이터 소스로부터 수신된 데이터에 기초하여 데이터의 제2 부분에 적용된다. SQL 쿼리의 예는 도 3의 SQL 쿼리(200)이다. 일부 구현예에서, SQL 쿼리가 SQL 쿼리로부터 생성된 쿼리 플랜에 기초하여 union 유형 연산 및 제1 집계 연산을 포함하도록 결정된다.
절차는 SQL 쿼리가 제1 union 유형 연산이 제1 데이터 세트로부터 데이터의 적어도 일부에 적용되고, 제2 데이터 세트로부터 데이터의 적어도 일부에 적용될 것이라는 것을 기술한다는 것을 결정한다(406). 예를 들어, 처리는 SQL 쿼리를 파싱하여 union 유형 연산 (예, UNION 또는 UNION ALL)을 식별하고, 데이터의 일부에 대응하는 논항(예, 데이터의 부분을 포함하는 데이터 소스를 특정하는 논항)을 식별한다.
절차는 SQL 쿼리가 제1 집계 연산이 제1 union 유형 연산으로부터의 결과인 데이터에 적용될 것이라고 결정한다(408). 예를 들어, 절차는 SQL 쿼리를 파싱하여 제1 집계 연산을 식별하고, 예컨대 union 유형 연산이 제1 집계 연산에 논항으로서 제공된다.
일부 구현예에서, 절차는 제1 집계 연산에 기초하여 제2 집계 연산을 결정한다. 예를 들어, 절차는 수행시 제1 집계 연산의 출력에 등가인 출력을 생성하고, 일련의 연산으로부터 제2 집계 연산을 선택하는 일련의 연산을 결정할 수 있다. 일 실시예로서, 제1 집계 연산이 최소, 최대, 합산 또는 카운트 연산일 수 있고, 제2 집계 연산이 제1 집계 연산과 동일한 유형의 집계 연산일 수 있다. 또 다른 실시예로서, 제1 집계 연산이 평균 연산일 수 있고, 제2 집계 연산이 합산 연산이거나 카운트 연산일 수 있다. 이 실시예에서, 제2 집계 연산이 전술한 성질 1-4 중 하나에 따라 선택된다.
일부 구현예에서, 절차는 제2 집계 연산이 제1 데이터 소스를 관리하는 시스템에 의해 수행될 수 있다고 결정한다. 예를 들어, 데이터 소스를 관리하는 시스템이 SQL 스테이트먼트를 실행할 수 있는 RDBMS이면, 그 후 시스템은 연산이 SQL 스테이트먼트의 부분으로써 표현되는 경우에 집계 연산을 수행할 수 있다. RDBMS(112, 122)의 실시예가 도 1에 도시된다.
절차는 SQL 쿼리에 기초하여 컴퓨터 프로그램을 생성한다(410). 일부 구현예에서, 컴퓨터 프로그램이 제1 시스템, 예컨대 도 1의 데이터 처리 시스템(100)에 의해 생성된다. 프로그램의 실행은 아래의 도 8의 절차(500)에 대응할 수 있다. 일부 구현예에서, 이것은 SQL 쿼리에 기초하여 쿼리 플랜을 생성하는 단계; 제1 데이터 소스로부터의 데이터에 적용되는 제2 집계 연산을 쿼리 플랜에 더하는 단계; 제1 데이터 소스와 연관된 제1 시스템이 제2 집계 연산을 수행하기 위한 기능을 포함한다고 결정하는 단계; 제2 집계 연산을 수행하는 명령을 제1 데이터 소스를 나타내는 쿼리 플랜의 부분에 첨부하는 단계; 및 쿼리 플랜에 기초하여 컴퓨터 프로그램을 생성하는 단계를 포함한다. 프로그램은 그 후 실행될 수 있다.
일부 구현예에서, 절차에서 생성된 컴퓨터 프로그램(410)이 SQL 쿼리의 union 유형 연산을 나타내는 제1 컴포넌트를 포함한다. 제1 컴포넌트는 데이터의 제1 부분의 요약 및 데이터의 제2 부분의 요약에 적용되고, 각 요약은 각각의 대응하는 데이터의 부분보다 작은 레코드를 포함한다. 컴퓨터 프로그램이 또한 제1 데이터 소스를 표현하는 제2 컴포넌트를 포함할 수 있고, 제2 컴포넌트는 실행시, 명령이 제1 시스템에 의한 실행을 위해 송신되도록 한다. 이 명령은 제2 집계 연산에 대응하는 커맨드를 포함하는 SQL 스테이트먼트를 포함할 수 있다. 또한, 명령은 제1 시스템이 데이터로 하여금 컴퓨터 프로그램을 실행하는 시스템에 송신되게 하기 전에 수행된다.
이 실시예에서, 제2 컴포넌트의 출력이 제1 데이터 소스로부터의 데이터의 제1 부분의 요약을 포함할 수 있다. 컴퓨터 프로그램은 또한 제2 데이터 소스를 나타내는 제3 컴포넌트 및 제3 집계 연산을 나타내는 제4 컴포넌트를 포함하고, 제3 컴포넌트의 출력이 제4 컴포넌트로 흐르고, 제4 컴포넌트의 출력이 제1 컴포넌트로 흐른다. 예를 들어, 제3 집계 연산이 도 6의 컴포넌트(305)에 의해 표현될 수 있다. 또한, 제1 컴포넌트의 출력이 또 다른 집계 연산으로 흐를 수 있고, 도 6의 컴포넌트(308)에 의해 표현될 수 있다.
일부 구현예에서, 컴퓨터 프로그램은 또한, 제3 시스템이 제2 데이터 세트로부터의 데이터의 부분 상에 제2 집계 연산을 수행하고, 제3 시스템으로부터 데이터의 제2 부분의 요약인 특정 데이터 세트를 수신하도록 지시하는 명령을 송신한다. 예를 들어, 이는 제2 데이터 소스를 관리하는 시스템이 제2 집계 연산을 수행할 수 있다고 결정되는 때에 일어날 수 있다.
도 8은 SQL 쿼리 실행과 관련한 연산을 실행하기 위한 절차(500)을 나타내는 흐름도이다. 절차(500)는 예컨대 도 1의 데이터 처리 시스템(100)의 컴포넌트와 같은, 제1 시스템에 의해 수행될 수 있다. 예를 들어, 절차(500)는 실행 엔진(150)이 SQL 쿼리로부터 생성된 컴퓨터 프로그램의 적어도 부분을 실행하는 때에 도 2의 실행 엔진(150)에 의해 수행될 수 있다. 컴퓨터 프로그램은 도 1-2의 컴퓨터 프로그램(108) 및 도 7에서 생성된 컴퓨터 프로그램(410)일 수 있다. 또한, SQL 쿼리는 도 1 및 2의 쿼리(102)일 수 있다.
절차는 제1 데이터 세트로부터의 데이터의 부분 상에 제2 집계 연산을 수행하도록 제2 시스템에 지시하는 명령을 송신한다(502). 예를 들어, 제2 시스템은 도 1의 시스템(112, 122) 중 하나일 수 있다. 명령은 SQL 의 형태일 수 있다. 예를 들어, 명령은 도 1의 명령(114, 124)일 수 있다.
절차는 데이터의 제1 부분의 요약인 특정 데이터 세트를 제2 시스템으로부터 수신한다(504). 예를 들어, 데이터의 부분이 컴퓨터 프로그램이 생성되었던 SQL 쿼리 내에 참조된 데이터의 부분일 수 있다.
절차는 제2 데이터 세트로부터의 데이터의 부분의 요약과 특정 데이터 세트에서 제2 union 유형 연산을 수행한다(506). 예를 들어, 데이터의 제2 부분은 컴퓨터 프로그램이 생성되었던 SQL 쿼리 내에 참조된 데이터의 또 다른 부분일 수 있다. 일부 구현예에서, 제2 union 유형 연산이 제1 union 유형 연산과 동일한 유형이다. 전술한 바와 같이, union 유형 연산의 하나의 유형이 "union"이고 또 다른 것은 "union all"이다. 예를 들어, 제1 union 유형 연산이 "union all" 연산이고, 제2 union 유형 연산이 또한 "union all"이면, 두 연산은 동일한 유형이다.
이 방법으로, 컴퓨터 프로그램은 예컨대 SQL 쿼리가 상관적 데이터베이스 시스템 또는 SQL 쿼리를 평가하는(예, 실행하는) 다른 시스템에 의해 처리되었던 것처럼, SQL 쿼리의 출력과 등가인 출력을 생성한다. 그러나, 연산이 데이터 소스에 "푸시 다운"되기 때문에, 연산이 컴퓨터 프로그램 그 자체에 의해 수행되었던 경우 보다 컴퓨터 프로그램이 더욱 효율적으로 연산할 수 있다.
도 2의 쿼리 플래너(130), 생성 엔진(140), 및/또는 실행 엔진(150)이 UNIX 작동 시스템의 버전과 같은, 적합한 작동 시스템의 제어 하에서 예컨대 하나 이상의 범용 컴퓨터에 호스팅될 수 있다. 예를 들어, 이것은 다수의 중앙 처리 유닛(CPU) 또는 프로세서 코어, 로컬(예, 멀티프로세서 시스템 예컨대 대칭적 멀티-프로세싱(symmetric multi-processing, SMP) 컴퓨터) 또는 로컬 분산(예, 클러스터나 MPP(massively parallel processing)로 결합된 다수의 프로세서), 원격 또는 원격 분산(예, LAN(local area network) 및/또는 WAN(wide-area network)을 통해 결합된 다수의 프로세서), 또는 이들의 조합 중의 하나를 사용하는 컴퓨터 시스템의 구성을 포함하는 다수-노드 계산 환경을 포함할 수 있다.
도 5 및 6의 컴퓨터 프로그램(300, 300a)은 개발 환경에 디스플레이될 수 있다. 개발 환경은, 일부 구현예에서, 데이터플로우 그래프로서 어플리케이션을 개발하기 위한 시스템이다. 이 시스템에 따라 구현된 데이터플로우 그래프는, 프로세스 간의 정보를 이동시키기 위해, 그리고 프로세스를 위한 동작 순서를 정의하기 위해, 그래프 컴포넌트에 의해 표현된 개별의 프로세스 내에 그리고 외에 정보를 획득하기 위한 방법을 제공한다. 이 시스템은 임의의 이용가능한 방법으로부터 인터프로세스 통신 방법을 선택하는 알고리즘을 포함한다(예, 그래프의링크에 따른 통신 경로는 TCP/IP 또는 UNIX 도메인 소켓을 사용하거나, 프로세스 간에 데이터가 지나가기 위한 공유 메모리를 사용할 수 있음).
전술한 기술은 적합한 소프트웨어를 실행하는 컴퓨팅 시스템을 사용하여 구현될 수 있다. 예를 들어, 소프트웨어는, 적어도 하나의 프로세서, 적어도 하나의 데이터 저장 시스템(휘발성 및/또는 비휘발성 메모리 및/또는 저장 요소를 포함함), 적어도 하나의 사용자 인터페이스(적어도 하나의 입력 디바이스 또는 포트를 사용하여 입력을 수신하기 위해, 그리고 적어도 하나의 출력 디바이스 또는 포트를 사용하여 출력을 제공하기 위한 것임)을 각각 포함하는, 하나 이상의 컴퓨터 프로그램 내에 하나 이상의 프로그램되거나 프로그램 가능한 컴퓨팅 시스템(분산, 클라이언트/서버, 또는 그리드와 같은 다양한 구조일 수 있음)을 실행하는 절차를 포함할 수 있다. 소프트웨어는, 예컨대 데이터플로우 그래프의 설계, 구성 및 실행에 관련된 서비스를 제공하는, 더 대용량 프로그램의 하나 이상의 모듈을 포함할 수 있다. 프로그램의 모듈(예, 데이터플로우 그래프의 요소)은 데이터 저장소에 저장된 데이터 모델에 일치하는 다른 조직화된 데이터 또는 데이터 구조로서 구현될 수 있다.
소프트웨어는 유형의, 비-일시적 매체, 예컨대 CD-ROM 또는 다른 컴퓨터-판독가능 매체(예, 범용 또는 전용 컴퓨팅 시스템 또는 디바이스에 의해 판독 가능함)에 제공될 수 있고, 또는 실행되는 경우 컴퓨팅 시스템의 유형의, 비-휘발성 매체로 네트워크의 통신 매체를 통해 전달될 수 있다(예컨대, 전파 신호로 인코딩되어서). 처리의 일부 또는 전부가 전용 컴퓨터에서 수행될 수 있고 또는 전용 하드웨어, 예컨대 코프로세서나 필드-프로그램 가능 게이트 어레이(FPGA) 또는 전용의 ASIC(application-specific integrated circuit)를 사용하여 수행될 수 있다. 처리는 분산 방식으로 구현될 수 있고, 이 방식에서 소프트웨어에 의해 특정된 계산의 상이한 부분들이 상이한 컴퓨팅 요소에 의해 수행된다. 그러한 각 컴퓨터 프로그램은, 저장 디바이스 매체가 본원에 기재된 처리를 수행하도록 컴퓨터에 의해 판독되는 경우에 컴퓨터를 구성하고 동작하기 위하여, 바람직하게는 범용 또는 전용 프로그램 가능한 컴퓨터에 의해 액세스 가능한 저장 디바이스의 컴퓨터-판독가능 저장 매체(예, 고상 메모리 또는 매체, 또는 자기적 또는 광학 매체)에 저장되거나 다운로드될 수 있다. 본원의 진보적인 시스템은 또한 컴퓨터 프로그램으로 구성되는 유형의, 비-일시적 매체로서 구현될 수 있음을 고려하며, 이 매체는 컴퓨터로 하여금 본원에 기재된 처리 단계 중 하나 이상의 수행하도록 특정의 그리고 미리정의된 방식으로 동작하게 한다.
본원의 다수의 구현예가 기재되었다. 그럼에도 불구하고, 전술한 기재는 발명의 범위를 도시하나 이에 제한되지는 않도록 의도하고, 이 범위는 다음의 청구항의 범위로 규정된다. 따라서, 다른 구현예가 다음의 청구항의 범위 내에 있다. 예를 들어, 본원의 범위를 벗어나지 않는 한 다양한 변경이 가능하다. 추가적으로, 전술된 일부의 단계는 독립적인 순서일 수 있고, 따라서 전술된 바와 상이한 순서로 수행될 수 있다.

Claims (17)

  1. SQL 쿼리에 기초하여 컴퓨터 프로그램을 생성하는 컴퓨터-구현 방법으로서,
    제1 데이터 소스에 저장된 제1 데이터 세트에 대한 참조를 포함하고 상기 제1 데이터 소스와 상이한 제2 데이터 소스에 저장된 제2 데이터 세트에 대한 참조를 포함하는, SQL 쿼리를 수신(402)하는 단계;
    상기 SQL 쿼리가 제1 union 유형 연산 및 제1 집계 연산을 포함하는 2 이상의 커맨드를 포함한다고 결정(404)하고,
    상기 SQL 쿼리가, 상기 제1 union 유형 연산이 상기 제1 데이터 세트로부터의 데이터의 적어도 일 부분에 적용될 것이고, 상기 제2 데이터 세트로부터의 데이터의 적어도 일 부분에 적용될 것임을 기술한다고 결정(406)하는 단계;
    상기 SQL 쿼리가 상기 제1 집계 연산이 상기 제1 union 유형 연산의 결과인 데이터에 적용될 것임을 기술한다고 결정(408)하는 단계;
    상기 SQL 쿼리에 기초하여 제1 시스템 상에 컴퓨터 프로그램을 생성(410)하는 단계로서, 상기 컴퓨터 프로그램은,
    제2 시스템에게 상기 제1 데이터 세트로부터의 데이터의 부분에 대해 제2 집계 연산을 수행하도록 지시하는 명령을 송신(502)하고,
    상기 제2 시스템으로부터, 상기 제1 데이터 세트로부터의 데이터의 부분의 요약인 특정 데이터 세트를 수신(504)하고,
    상기 제2 데이터 세트로부터의 데이터의 부분의 요약 및 상기 특정 데이터 세트에 대한 제2 union 유형 연산을 수행(506)하도록 구성된, 컴퓨터 프로그램을 생성하는 단계
    를 포함하는,
    SQL 쿼리에 기초하여 컴퓨터 프로그램을 생성하는 컴퓨터-구현 방법.
  2. 제1항에 있어서,
    상기 제1 시스템은 그래프-기반 처리 시스템이고, 상기 제2 시스템은 RDBMS(relational database management system)를 포함하는, SQL 쿼리에 기초하여 컴퓨터 프로그램을 생성하는 컴퓨터-구현 방법.
  3. 제1항에 있어서,
    상기 컴퓨터 프로그램은,
    제3 시스템에게 상기 제2 데이터 세트로부터의 데이터의 부분에 대해 제2 집계 연산을 수행하도록 지시하는 명령을 송신하고,
    상기 제3 시스템으로부터, 상기 제2 데이터 세트로부터의 데이터의 부분의 요약인 특정 데이터 세트를 수신하도록 더 구성되는, SQL 쿼리에 기초하여 컴퓨터 프로그램을 생성하는 컴퓨터-구현 방법.
  4. 제1항에 있어서,
    상기 컴퓨터 프로그램은,
    상기 제1 데이터 세트로부터의 데이터의 부분의 요약과 상기 제2 데이터 세트로부터의 데이터의 부분의 요약인 데이터 세트에 적용되는 SQL 쿼리의 union 유형 연산을 나타내는 제1 컴포넌트로서, 각각의 요약은 데이터의 각각의 대응하는 부분보다 작은 레코드를 포함하는, 제1 컴포넌트, 및
    상기 제1 데이터 세트를 나타내는 제2 컴포넌트로서, 실행시 명령이 송신되도록 하는, 제2 컴포넌트를 포함하는, SQL 쿼리에 기초하여 컴퓨터 프로그램을 생성하는 컴퓨터-구현 방법.
  5. 제4항에 있어서,
    상기 컴퓨터 프로그램은 상기 제2 데이터 세트를 나타내는 제3 컴포넌트, 및 제3 집계 연산을 나타내는 제4 컴포넌트를 포함하고, 상기 제3 컴포넌트의 출력이 상기 제4 컴포넌트로 흐르고, 상기 제4 컴포넌트의 출력이 상기 제1 컴포넌트로 흐르거나, 또는
    상기 제2 컴포넌트의 출력이 상기 제1 데이터 세트로부터의 데이터의 부분의 요약인 특정 데이터 세트를 포함하는, SQL 쿼리에 기초하여 컴퓨터 프로그램을 생성하는 컴퓨터-구현 방법.
  6. 제4항에 있어서,
    상기 제1 데이터 소스를 나타내는 컴포넌트가, 상기 제1 시스템이 데이터를 상기 컴퓨터 프로그램을 실행하는 시스템에 송신하게 하기 전에 수행되는 명령을 송신하는, SQL 쿼리에 기초하여 컴퓨터 프로그램을 생성하는 컴퓨터-구현 방법.
  7. 제1항에 있어서,
    상기 명령은 상기 제2 집계 연산에 대응하는 커맨드를 포함하는 SQL 스테이트먼트를 포함하는, SQL 쿼리에 기초하여 컴퓨터 프로그램을 생성하는 컴퓨터-구현 방법.
  8. 제1항에 있어서,
    상기 SQL 쿼리에 기초하여 컴퓨터 프로그램을 생성하는 단계는,
    상기 SQL 쿼리에 기초하여 쿼리 플랜을 생성하는 단계;
    상기 제1 데이터 소스로부터의 데이터에 적용되는 제2 집계 연산을, 상기 쿼리 플랜에 더하는 단계;
    상기 제1 시스템이 상기 제2 집계 연산을 수행하기 위한 기능을 포함한다고 결정하는 단계;
    상기 제2 집계 연산을 수행하기 위한 명령을, 상기 제1 데이터 세트를 나타내는 쿼리 플랜의 부분에 첨부하는 단계; 및
    상기 쿼리 플랜에 기초하여 상기 컴퓨터 프로그램을 생성하는 단계를 포함하는, SQL 쿼리에 기초하여 컴퓨터 프로그램을 생성하는 컴퓨터-구현 방법.
  9. 제1항에 있어서,
    상기 제1 집계 연산이 최소, 최대, 합산 또는 카운트 연산이고, 상기 제2 집계 연산이 상기 제1 집계 연산과 동일한 유형의 집계 연산이거나, 또는
    상기 제1 집계 연산이 평균 연산이고, 상기 제2 집계 연산이 합산 연산 또는 카운트 연산인 것인, SQL 쿼리에 기초하여 컴퓨터 프로그램을 생성하는 컴퓨터-구현 방법.
  10. 제1항에 있어서,
    상기 제1 집계 연산에 기초하여 상기 제2 집계 연산을 결정하는 단계를 포함하는, SQL 쿼리에 기초하여 컴퓨터 프로그램을 생성하는 컴퓨터-구현 방법.
  11. 제10항에 있어서,
    상기 제1 집계 연산에 기초하여 상기 제2 집계 연산을 결정하는 단계는,
    수행되는 때에, 상기 제1 집계 연산의 출력에 등가인 출력을 발생하는 일련의 연산을 결정하는 단계, 및
    상기 일련의 연산으로부터 상기 제2 집계 연산을 선택하는 단계를 포함하는, SQL 쿼리에 기초하여 컴퓨터 프로그램을 생성하는 컴퓨터-구현 방법.
  12. 제1항에 있어서,
    상기 제1 union 유형 연산이 상기 제2 union 유형 연산과 동일한 유형인 것인, SQL 쿼리에 기초하여 컴퓨터 프로그램을 생성하는 컴퓨터-구현 방법.
  13. SQL 쿼리에 기초하여 컴퓨터 프로그램을 생성하는 시스템으로서,
    제1 데이터 소스에 저장된 제1 데이터 세트에 대한 참조를 포함하고 상기 제1 데이터 소스와 상이한 제2 데이터 소스에 저장된 제2 데이터 세트에 대한 참조를 포함하는, SQL 쿼리를 수신(402)하고;
    상기 SQL 쿼리가 제1 union 유형 연산 및 제1 집계 연산을 포함하는 2 이상의 커맨드를 포함한다고 결정(404)하고,
    상기 SQL 쿼리가, 상기 제1 union 유형 연산이 상기 제1 데이터 세트로부터의 데이터의 적어도 일 부분에 적용될 것이고, 상기 제2 데이터 세트로부터의 데이터의 적어도 일 부분에 적용될 것임을 기술한다고 결정(406)하고;
    상기 SQL 쿼리가 상기 제1 집계 연산이 상기 제1 union 유형 연산의 결과인 데이터에 적용될 것임을 기술한다고 결정(408)하고;
    상기 SQL 쿼리에 기초하여 제1 시스템 상에 컴퓨터 프로그램을 생성(410)하도록 구성된, 하나 이상의 프로세서를 포함하고,
    상기 컴퓨터 프로그램은,
    제2 시스템에게 상기 제1 데이터 세트로부터의 데이터의 부분에 대해 제2 집계 연산을 수행하도록 지시하는 명령을 송신(502)하고,
    상기 제2 시스템으로부터, 상기 제1 데이터 세트로부터의 데이터의 부분의 요약인 특정 데이터 세트를 수신(504)하고,
    상기 제2 데이터 세트로부터의 데이터의 부분의 요약 및 상기 특정 데이터 세트에 대한 제2 union 유형 연산을 수행(506)하도록 구성되는,
    SQL 쿼리에 기초하여 컴퓨터 프로그램을 생성하는 시스템.
  14. 실행가능 코드가 저장된 컴퓨터-판독가능 매체로서,
    상기 실행가능 코드는, 실행시 컴퓨터 시스템으로 하여금, 제1항 내지 제12항 중 어느 한 항의 방법을 수행하도록 하는, 실행가능 코드가 저장된 컴퓨터-판독가능 매체.
  15. SQL 쿼리에 기초하여 컴퓨터 프로그램을 생성하는 시스템으로서,
    제1 데이터 소스에 저장된 제1 데이터 세트에 대한 참조를 포함하고 상기 제1 데이터 소스와 상이한 제2 데이터 소스에 저장된 제2 데이터 세트에 대한 참조를 포함하는, SQL 쿼리를 수신(402)하는 수단;
    상기 SQL 쿼리가 제1 union 유형 연산 및 제1 집계 연산을 포함하는 2 이상의 커맨드를 포함한다고 결정(404)하는 수단과,
    상기 SQL 쿼리가, 상기 제1 union 유형 연산이 상기 제1 데이터 세트로부터의 데이터의 적어도 일 부분에 적용될 것이고, 상기 제2 데이터 세트로부터의 데이터의 적어도 일 부분에 적용될 것임을 기술한다고 결정(406)하는 수단;
    상기 SQL 쿼리가 상기 제1 집계 연산이 상기 제1 union 유형 연산의 결과인 데이터에 적용될 것임을 기술한다고 결정(408)하는 수단;
    상기 SQL 쿼리에 기초하여 제1 시스템 상에 컴퓨터 프로그램을 생성(410)하는 수단으로서, 상기 컴퓨터 프로그램은,
    제2 시스템에게 상기 제1 데이터 세트로부터의 데이터의 부분에 대해 제2 집계 연산을 수행하도록 지시하는 명령을 송신(502)하고,
    상기 제2 시스템으로부터, 상기 제1 데이터 세트로부터의 데이터의 부분의 요약인 특정 데이터 세트를 수신(504)하고,
    상기 제2 데이터 세트로부터의 데이터의 부분의 요약 및 상기 특정 데이터 세트에 대한 제2 union 유형 연산을 수행(506)하도록 구성되는, 컴퓨터 프로그램을 생성하는 수단
    을 포함하는,
    SQL 쿼리에 기초하여 컴퓨터 프로그램을 생성하는 시스템.
  16. 삭제
  17. 삭제
KR1020177014938A 2014-11-14 2015-11-10 Union 유형 연산을 포함하는 쿼리 처리 KR102041168B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201462079922P 2014-11-14 2014-11-14
US62/079,922 2014-11-14
US14/746,188 US10437819B2 (en) 2014-11-14 2015-06-22 Processing queries containing a union-type operation
US14/746,188 2015-06-22
PCT/US2015/059976 WO2016077362A1 (en) 2014-11-14 2015-11-10 Processing queries containing a union-type operation

Publications (2)

Publication Number Publication Date
KR20170083569A KR20170083569A (ko) 2017-07-18
KR102041168B1 true KR102041168B1 (ko) 2019-11-06

Family

ID=54602073

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020177014938A KR102041168B1 (ko) 2014-11-14 2015-11-10 Union 유형 연산을 포함하는 쿼리 처리

Country Status (9)

Country Link
US (1) US10437819B2 (ko)
EP (1) EP3218823B1 (ko)
JP (1) JP6787889B2 (ko)
KR (1) KR102041168B1 (ko)
CN (1) CN107003868B (ko)
AU (1) AU2015346525C1 (ko)
CA (1) CA2967328C (ko)
SG (2) SG10201810036QA (ko)
WO (1) WO2016077362A1 (ko)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10970280B2 (en) * 2015-10-07 2021-04-06 International Business Machines Corporation Query plan based on a data storage relationship
US10628416B2 (en) * 2016-05-31 2020-04-21 International Business Machines Corporation Enhanced database query processing
US10558668B2 (en) 2016-07-01 2020-02-11 International Business Machines Corporation Result set output criteria
US20180137667A1 (en) 2016-11-14 2018-05-17 Oracle International Corporation Graph Visualization Tools With Summary Visualization For Very Large Labeled Graphs
US10585575B2 (en) 2017-05-31 2020-03-10 Oracle International Corporation Visualizing UI tool for graph construction and exploration with alternative action timelines
US11475000B2 (en) * 2017-11-30 2022-10-18 International Business Machines Corporation Aggregation in dynamic and distributed computing systems
US11120082B2 (en) 2018-04-18 2021-09-14 Oracle International Corporation Efficient, in-memory, relational representation for heterogeneous graphs
US10810192B2 (en) * 2018-09-18 2020-10-20 Sigma Computing, Inc. Generating a database query to dynamically aggregate rows of a data set
US11093223B2 (en) 2019-07-18 2021-08-17 Ab Initio Technology Llc Automatically converting a program written in a procedural programming language into a dataflow graph and related systems and methods
CN111694887B (zh) * 2020-06-12 2023-07-04 最美天气(上海)科技有限公司 一种数据适应性存储调度系统及方法
KR102200010B1 (ko) * 2020-08-06 2021-01-08 (주)시큐레이어 이기종 데이터 소스 간 연관 분석의 결과를 제공하는 방법 및 장치
US11494373B2 (en) 2021-02-09 2022-11-08 Oracle International Corporation Nested query modification tool

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110179404A1 (en) 2010-01-20 2011-07-21 Aetna Inc. System and method for code automation
US20140330827A1 (en) 2013-05-03 2014-11-06 Sas Institute Inc. Methods and systems to operate on group-by sets with high cardinality

Family Cites Families (137)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4586137A (en) 1982-10-18 1986-04-29 Dresser Industries, Inc. Method for generating variable well logging data composites
JPH01108638A (ja) 1987-10-21 1989-04-25 Hitachi Ltd 並列化コンパイル方式
JP2738692B2 (ja) 1988-01-29 1998-04-08 株式会社日立製作所 並列化コンパイル方法
US5072371A (en) 1989-03-01 1991-12-10 The United States Of America As Represented By The United States Department Of Energy Method for simultaneous overlapped communications between neighboring processors in a multiple
US5121494A (en) 1989-10-05 1992-06-09 Ibm Corporation Joining two database relations on a common field in a parallel relational database field
US5367619A (en) 1990-04-27 1994-11-22 Eaton Corporation Electronic data entry system employing an expert system to facilitate generation of electronic data forms with complex interrelationships between fields and subforms
US5347639A (en) 1991-07-15 1994-09-13 International Business Machines Corporation Self-parallelizing computer system and method
US5632022A (en) 1991-11-13 1997-05-20 The United States Of America As Represented By The Administrator Of The National Aeronautics And Space Administration Encyclopedia of software components
US5313584A (en) 1991-11-25 1994-05-17 Unisys Corporation Multiple I/O processor system
JPH05257709A (ja) 1992-03-16 1993-10-08 Hitachi Ltd 並列化判別方法およびそれを用いた並列化支援方法
US5432940A (en) 1992-11-02 1995-07-11 Borland International, Inc. System and methods for improved computer-based training
US5574898A (en) 1993-01-08 1996-11-12 Atria Software, Inc. Dynamic software version auditor which monitors a process to provide a list of objects that are accessed
US5446915A (en) 1993-05-25 1995-08-29 Intel Corporation Parallel processing system virtual connection method and apparatus with protection and flow control
US5475842A (en) 1993-08-11 1995-12-12 Xerox Corporation Method of compilation optimization using an N-dimensional template for relocated and replicated alignment of arrays in data-parallel programs for reduced data communication during execution
US5600833A (en) 1993-09-17 1997-02-04 Digital Equipment Corp. Attribute portion based document retrieval system with system query language interface
JP4050339B2 (ja) 1994-04-28 2008-02-20 株式会社東芝 並行プログラム作成支援装置及び並行プログラム作成方法並びに並行プログラム実行装置
US5588150A (en) 1994-09-29 1996-12-24 International Business Machines Corporation Push down optimization in a distributed, multi-database system
US5768564A (en) 1994-10-07 1998-06-16 Tandem Computers Incorporated Method and apparatus for translating source code from one high-level computer language to another
FI98690C (fi) 1994-10-18 1997-07-25 Nokia Telecommunications Oy Menetelmä alueryhmäpuhelun muodostamiseksi matkaviestinjärjestelmässä ja matkaviestinjärjestelmä
US5734886A (en) 1994-11-16 1998-03-31 Lucent Technologies Inc. Database dependency resolution method and system for identifying related data files
FI98973C (fi) 1994-11-22 1997-09-10 Nokia Telecommunications Oy Menetelmä ryhmätietojen ylläpitämiseksi matkaviestinjärjestelmässä ja matkaviestinjärjestelmä
US5546576A (en) 1995-02-17 1996-08-13 International Business Machines Corporation Query optimizer system that detects and prevents mutating table violations of database integrity in a query before execution plan generation
US5619692A (en) 1995-02-17 1997-04-08 International Business Machines Corporation Semantic optimization of query order requirements using order detection by normalization in a query compiler system
FI100215B (fi) 1995-03-17 1997-10-15 Nokia Telecommunications Oy Matkaviestijärjestelmän tilaajatietojen päivittäminen
US5706509A (en) 1995-04-28 1998-01-06 Intel Corporation Application independent record level synchronization
US5678044A (en) 1995-06-02 1997-10-14 Electronic Data Systems Corporation System and method for improved rehosting of software systems
US5682537A (en) 1995-08-31 1997-10-28 Unisys Corporation Object lock management system with improved local lock management and global deadlock detection in a parallel data processing system
US5712971A (en) 1995-12-11 1998-01-27 Ab Initio Software Corporation Methods and systems for reconstructing the state of a computation
US5819021A (en) 1995-12-11 1998-10-06 Ab Initio Software Corporation Overpartitioning system and method for increasing checkpoints in component-based parallel applications
US6311265B1 (en) 1996-03-25 2001-10-30 Torrent Systems, Inc. Apparatuses and methods for programming parallel computers
US5909681A (en) 1996-03-25 1999-06-01 Torrent Systems, Inc. Computer system and computerized method for partitioning data for parallel processing
US5799149A (en) 1996-06-17 1998-08-25 International Business Machines Corporation System partitioning for massively parallel processors
US5870743A (en) 1996-06-24 1999-02-09 Oracle Corporation Method and apparatus for parallelizing operations that create a table
US5966072A (en) 1996-07-02 1999-10-12 Ab Initio Software Corporation Executing computations expressed as graphs
JPH10232875A (ja) 1997-02-19 1998-09-02 Hitachi Ltd データベース管理方法および並列データベース管理システム
US6330008B1 (en) 1997-02-24 2001-12-11 Torrent Systems, Inc. Apparatuses and methods for monitoring performance of parallel computing
US5999729A (en) 1997-03-06 1999-12-07 Continuum Software, Inc. System and method for developing computer programs for execution on parallel processing systems
US5956074A (en) 1997-03-11 1999-09-21 Sclafani; Peter J. Cable television return display unit
JP3155991B2 (ja) 1997-04-09 2001-04-16 日本アイ・ビー・エム株式会社 集約演算実行方法及びコンピュータ・システム
US6092062A (en) 1997-06-30 2000-07-18 International Business Machines Corporation Relational database query optimization to perform query evaluation plan, pruning based on the partition properties
US6077313A (en) 1997-10-22 2000-06-20 Microsoft Corporation Type partitioned dataflow analyses
US6295518B1 (en) 1997-12-09 2001-09-25 Mci Communications Corporation System and method for emulating telecommunications network devices
US6266804B1 (en) 1997-12-23 2001-07-24 Ab Initio Software Corporation Method for analyzing capacity of parallel processing systems
US6625593B1 (en) 1998-06-29 2003-09-23 International Business Machines Corporation Parallel query optimization strategies for replicated and partitioned tables
US6205465B1 (en) 1998-07-22 2001-03-20 Cisco Technology, Inc. Component extensible parallel execution of multiple threads assembled from program components specified with partial inter-component sequence information
US6453464B1 (en) 1998-09-03 2002-09-17 Legacyj. Corp., Inc. Method and apparatus for converting COBOL to Java
US6378126B2 (en) 1998-09-29 2002-04-23 International Business Machines Corporation Compilation of embedded language statements in a source code program
JP2000148699A (ja) 1998-11-06 2000-05-30 Nec Corp ネットワークマネージメントシステム
JP4406944B2 (ja) 1998-11-11 2010-02-03 株式会社日立製作所 計算機システム及び問合せに対する処理分散システム
US7047232B1 (en) 1999-01-13 2006-05-16 Ab Initio Software Corporation Parallelizing applications of script-driven tools
US7080062B1 (en) 1999-05-18 2006-07-18 International Business Machines Corporation Optimizing database queries using query execution plans derived from automatic summary table determining cost based queries
US6560593B1 (en) 1999-07-20 2003-05-06 Computer Associates Think, Inc. Method and apparatus for viewing the effect of changes to an index for a database table on an optimization plan for a database query
JP4552242B2 (ja) 1999-10-06 2010-09-29 株式会社日立製作所 仮想表インタフェースと該インタフェースを用いた問合せ処理システム及び方法
US6615203B1 (en) 1999-12-17 2003-09-02 International Business Machines Corporation Method, computer program product, and system for pushdown analysis during query plan generation
US6947934B1 (en) 2000-02-16 2005-09-20 International Business Machines Corporation Aggregate predicates and search in a database management system
US7164422B1 (en) 2000-07-28 2007-01-16 Ab Initio Software Corporation Parameterized graphs with conditional components
US6785668B1 (en) 2000-11-28 2004-08-31 Sas Institute Inc. System and method for data flow analysis of complex data filters
US8412746B2 (en) 2001-05-25 2013-04-02 International Business Machines Corporation Method and system for federated querying of data sources
US6877000B2 (en) 2001-08-22 2005-04-05 International Business Machines Corporation Tool for converting SQL queries into portable ODBC
US6725212B2 (en) 2001-08-31 2004-04-20 International Business Machines Corporation Platform-independent method and system for graphically presenting the evaluation of a query in a database management system
JP2003099441A (ja) 2001-09-21 2003-04-04 Hitachi Ltd データ検索手順探索方法
US6915290B2 (en) 2001-12-11 2005-07-05 International Business Machines Corporation Database query optimization apparatus and method that represents queries as graphs
US7409474B2 (en) 2002-06-27 2008-08-05 Broadcom Corporation Method and system for rate adaptation
US7167850B2 (en) 2002-10-10 2007-01-23 Ab Initio Software Corporation Startup and control of graph-based computation
US7953891B2 (en) 2003-03-18 2011-05-31 Microsoft Corporation Systems and methods for scheduling data flow execution based on an arbitrary graph describing the desired data flow
CA2429910A1 (en) 2003-05-27 2004-11-27 Cognos Incorporated System and method of query transformation
US7249120B2 (en) 2003-06-27 2007-07-24 Microsoft Corporation Method and apparatus for selecting candidate statistics to estimate the selectivity value of the conditional selectivity expression in optimize queries based on a set of predicates that each reference a set of relational database tables
US20050038788A1 (en) 2003-08-14 2005-02-17 International Business Machines Corporation Annotation security to prevent the divulgence of sensitive information
US7805411B2 (en) 2003-09-06 2010-09-28 Oracle International Corporation Auto-tuning SQL statements
WO2005028627A2 (en) 2003-09-19 2005-03-31 Netezza Corporation Performing sequence analysis as a relational join
US7165063B2 (en) 2003-11-19 2007-01-16 International Business Machines Corporation Context quantifier transformation in XML query rewrite
US7133861B2 (en) 2003-12-04 2006-11-07 International Business Machines Corporation Query access plan rebuilds
US7930432B2 (en) 2004-05-24 2011-04-19 Microsoft Corporation Systems and methods for distributing a workplan for data flow execution based on an arbitrary graph describing the desired data flow
US7899833B2 (en) 2004-11-02 2011-03-01 Ab Initio Technology Llc Managing related data objects
US7461052B2 (en) 2004-12-06 2008-12-02 International Business Machines Corporation Abstract query plan
US7890532B2 (en) 2004-12-15 2011-02-15 Microsoft Corporation Complex data access
US7359922B2 (en) 2004-12-22 2008-04-15 Ianywhere Solutions, Inc. Database system and methodology for generalized order optimization
US20060265362A1 (en) 2005-05-18 2006-11-23 Content Analyst Company, Llc Federated queries and combined text and relational data
US7856523B2 (en) 2005-06-01 2010-12-21 Microsoft Corporation Random Access Memory (RAM) based Content Addressable Memory (CAM) management
US7716630B2 (en) 2005-06-27 2010-05-11 Ab Initio Technology Llc Managing parameters for graph-based computations
US7877350B2 (en) 2005-06-27 2011-01-25 Ab Initio Technology Llc Managing metadata for graph-based computations
US7584205B2 (en) 2005-06-27 2009-09-01 Ab Initio Technology Llc Aggregating data with complex operations
US20070067274A1 (en) 2005-09-16 2007-03-22 International Business Machines Corporation Hybrid push-down/pull-up of unions with expensive operations in a federated query processor
US7464084B2 (en) 2006-01-30 2008-12-09 International Business Machines Corporation Method for performing an inexact query transformation in a heterogeneous environment
US7945562B2 (en) 2006-03-15 2011-05-17 Oracle International Corporation Join predicate push-down optimizations
US7870556B2 (en) 2006-05-16 2011-01-11 Ab Initio Technology Llc Managing computing resources in graph-based computations
EP2527983A3 (en) 2006-08-10 2013-06-12 Ab Initio Technology LLC Distributing services in graph-based computations
JP4872529B2 (ja) 2006-08-22 2012-02-08 株式会社日立製作所 リバースエンジニアリング支援方法
JP2008158664A (ja) 2006-12-21 2008-07-10 Sony Corp 通信システム、サーバ、通信端末及び通信方法
US8069129B2 (en) 2007-04-10 2011-11-29 Ab Initio Technology Llc Editing and compiling business rules
US8122088B2 (en) 2007-06-28 2012-02-21 International Business Machines Corporation Adding personal note capabilities to text exchange clients
US20100005077A1 (en) 2008-07-07 2010-01-07 Kickfire, Inc. Methods and systems for generating query plans that are compatible for execution in hardware
US9424315B2 (en) 2007-08-27 2016-08-23 Teradata Us, Inc. Methods and systems for run-time scheduling database operations that are executed in hardware
EP2191362B1 (en) 2007-09-20 2015-08-19 Ab Initio Technology LLC Managing data flows in graph-based computations
US8527976B2 (en) 2007-11-14 2013-09-03 Nec Laboratories America, Inc. System and method for generating error traces for concurrency bugs
CN101436192B (zh) 2007-11-16 2011-03-16 国际商业机器公司 用于优化针对垂直存储式数据库的查询的方法和设备
US20090198703A1 (en) 2008-01-31 2009-08-06 Hewlett-Packard Development Company, L.P. Intelligent data storage system
US7933916B2 (en) 2008-02-28 2011-04-26 Microsoft Corporation Querying nonSQL data stores with a SQL-style language
US8537160B2 (en) 2008-03-05 2013-09-17 Microsoft Corporation Generating distributed dataflow graphs
JP2009217405A (ja) 2008-03-07 2009-09-24 Nec Corp ジョブネットワーク自動生成方式及びプログラム
US8538985B2 (en) 2008-03-11 2013-09-17 International Business Machines Corporation Efficient processing of queries in federated database systems
US20100295833A1 (en) 2008-04-11 2010-11-25 Masaaki Nishio Display device and method of driving display device
US7974967B2 (en) 2008-04-15 2011-07-05 Sap Ag Hybrid database system using runtime reconfigurable hardware
US20100057695A1 (en) 2008-08-28 2010-03-04 Microsoft Corporation Post-processing search results on a client computer
US7917463B2 (en) 2008-10-10 2011-03-29 Business.Com, Inc. System and method for data warehousing and analytics on a distributed file system
US20100121868A1 (en) 2008-11-07 2010-05-13 Yann Le Biannic Converting a database query to a multi-dimensional expression query
US8666966B2 (en) 2009-01-30 2014-03-04 Hewlett-Packard Development Company, L.P. Providing parallel result streams for database queries
KR20150038758A (ko) 2009-02-13 2015-04-08 아브 이니티오 테크놀로지 엘엘시 태스크 실행 관리
US8392398B2 (en) 2009-07-29 2013-03-05 International Business Machines Corporation Query optimization over graph data streams
US9477778B2 (en) 2009-08-21 2016-10-25 Oracle International Corporation XML query optimization with order analysis of XML schema
US9064047B2 (en) 2009-09-24 2015-06-23 International Business Machines Corporation Parallel processing of ETL jobs involving extensible markup language documents
US8620903B2 (en) 2009-11-04 2013-12-31 Nec Laboratories America, Inc. Database distribution system and methods for scale-out applications
US8688683B2 (en) 2009-11-30 2014-04-01 Business Objects Software Ltd. Query plan reformulation
US9665620B2 (en) 2010-01-15 2017-05-30 Ab Initio Technology Llc Managing data queries
US8204903B2 (en) 2010-02-16 2012-06-19 Microsoft Corporation Expressing and executing semantic queries within a relational database
US9286370B2 (en) * 2010-02-24 2016-03-15 International Business Machines Corporation Viewing a dimensional cube as a virtual data source
US8555265B2 (en) 2010-05-04 2013-10-08 Google Inc. Parallel processing of data
WO2011159759A1 (en) 2010-06-15 2011-12-22 Ab Initio Technology Llc Dynamically loading graph-based computations
JP5536568B2 (ja) * 2010-07-01 2014-07-02 インターナショナル・ビジネス・マシーンズ・コーポレーション トランザクションを集約して処理する方法、システム、およびプログラム
US8326821B2 (en) 2010-08-25 2012-12-04 International Business Machines Corporation Transforming relational queries into stream processing
US9128983B2 (en) 2010-10-13 2015-09-08 Aol Inc. Systems and methods for query optimization
US8850574B1 (en) 2011-02-28 2014-09-30 Google Inc. Safe self-modifying code
US20120246158A1 (en) 2011-03-25 2012-09-27 Microsoft Corporation Co-range partition for query plan optimization and data-parallel programming model
US9116955B2 (en) * 2011-05-02 2015-08-25 Ab Initio Technology Llc Managing data queries
US8782081B2 (en) 2011-05-11 2014-07-15 Google Inc. Query template definition and transformation
US8898145B2 (en) * 2011-06-15 2014-11-25 Microsoft Corporation Query optimization techniques for business intelligence systems
US9449030B2 (en) 2011-06-30 2016-09-20 International Business Machines Corporation Method for native program to inherit same transaction content when invoked by primary program running in separate environment
US8635206B2 (en) * 2011-06-30 2014-01-21 International Business Machines Corporation Database query optimization
JP5357286B2 (ja) * 2011-09-21 2013-12-04 前田建設工業株式会社 情報処理装置、情報処理方法、およびプログラム
US9177022B2 (en) 2011-11-02 2015-11-03 Microsoft Technology Licensing, Llc User pipeline configuration for rule-based query transformation, generation and result display
US9183302B1 (en) 2012-03-23 2015-11-10 The Mathworks, Inc. Creating a technical computing environment (TCE)-based search engine
JP5835084B2 (ja) * 2012-05-02 2015-12-24 富士通株式会社 クエリ統合方法、クエリ統合プログラム、および統合コンポーネント生成装置
US9182957B2 (en) 2012-07-10 2015-11-10 Loring Craymer Method and system for automated improvement of parallelism in program compilation
CA2879668C (en) 2012-07-24 2020-07-07 Ab Initio Technology Llc Mapping entities in data models
US9135301B2 (en) 2013-03-14 2015-09-15 Oracle International Corporation Pushdown of sorting and set operations (union, intersection, minus) to a large number of low-power cores in a heterogeneous system
WO2014144889A2 (en) * 2013-03-15 2014-09-18 Amazon Technologies, Inc. Scalable analysis platform for semi-structured data
CN104123374B (zh) * 2014-07-28 2017-09-29 北京京东尚科信息技术有限公司 分布式数据库中聚合查询的方法及装置

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110179404A1 (en) 2010-01-20 2011-07-21 Aetna Inc. System and method for code automation
US20140330827A1 (en) 2013-05-03 2014-11-06 Sas Institute Inc. Methods and systems to operate on group-by sets with high cardinality

Also Published As

Publication number Publication date
EP3218823B1 (en) 2019-06-12
SG11201703343YA (en) 2017-05-30
AU2015346525C1 (en) 2019-07-04
US10437819B2 (en) 2019-10-08
JP2017535869A (ja) 2017-11-30
CN107003868A (zh) 2017-08-01
EP3218823A1 (en) 2017-09-20
KR20170083569A (ko) 2017-07-18
US20160140166A1 (en) 2016-05-19
CN107003868B (zh) 2021-05-11
CA2967328A1 (en) 2016-05-19
AU2015346525A1 (en) 2017-05-18
CA2967328C (en) 2020-06-02
WO2016077362A1 (en) 2016-05-19
JP6787889B2 (ja) 2020-11-18
SG10201810036QA (en) 2018-12-28
AU2015346525B2 (en) 2019-02-28

Similar Documents

Publication Publication Date Title
KR102041168B1 (ko) Union 유형 연산을 포함하는 쿼리 처리
JP6815456B2 (ja) 複数ソースからのデータの処理
JP6578333B2 (ja) データクエリの管理
US9576028B2 (en) Managing data queries
US20150169686A1 (en) System and method for querying hybrid multi data sources
Chen et al. Optimization of sub-query processing in distributed data integration systems
JP2017016208A (ja) 仮想データベースシステム管理装置、管理方法及び管理プログラム
Pandit et al. Accelerating big data analytics with collaborative planning in Teradata Aster 6

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant