시계열이 아닌 데이터베이스의 스냅 샷이 있습니다. 예를 들면 다음과 같습니다.
스냅 샷 1 일 :
+----+---------------+------------+------------+ | ID | Title | Category | Date | +----+---------------+------------+------------+ | 1 | My First Post | helloworld | 2015-01-01 | +----+---------------+------------+------------+
스냅 샷 2 일 (오늘 새로운 게시물이 추가됨) :
+----+----------------+------------+------------+ | ID | Title | Category | Date | +----+----------------+------------+------------+ | 1 | My first post | helloworld | 2015-01-01 | | 2 | My second post | other | 2015-01-02 | +----+----------------+------------+------------+
스냅 샷 3 일 (포스트 2는 오늘 제거됨) :
+----+---------------+------------+------------+ | ID | Title | Category | Date | +----+---------------+------------+------------+ | 1 | My First Post | helloworld | 2015-01-01 | +----+---------------+------------+------------+
따라서 일 사이에 테이블 행이 일정하지 않을 수 있습니다. 이제 다음과 같은 쿼리를 사용할 수 있어야합니다.
SELECT category, COUNT(*) from day1.My_table group by category
이것은 하루의 한 테이블입니다. 우리가 경우 한 달에 카테고리 게시물의 일일 평균을 계산하려면 우리는 그런 짓을한다 :
SELECT category, SUM(cnt) / 30
from (
SELECT category, COUNT(*) as cnt
from day1.My_table
group by category
UNION ALL SELECT category, COUNT(*) as cnt
from day2.My_table
group by category
UNION ALL ...
UNION ALL SELECT category, COUNT(*) as cnt
from day30.My_table
group by category
) group by category
또 다른 예 는 한 달에 게시 된 게시물 수입니다 .
SELECT COUNT(distinct id)
from (
SELECT id
from day1.My_table
UNION ALL ...
UNION ALL SELECT id
from day30.My_table
)
기본적으로 무게를 고려해야합니다. day1.My_table 및 day5.My_table이 있으면 5 일이 아닌 1 일에있는 모든 게시물은 2,3,4 일에도 계산됩니다. day1과 day5 인 모든 게시물은 매월 매일있는 것처럼 계산됩니다 (= 다음 스냅 샷까지).
따라서 하루에 평균 = 6 개월의 평균 게시물 수를 고려하고 싶은 경우 스냅 샷이 하나만있는 경우 해당 스냅 샷에 가중치를 30으로 할당합니다.
따라서> = 6 개월 전 범위에 대해 한 달에 게시 된 평균 게시물은 다음과 같습니다.
SELECT category, SUM(cnt) / 30
from (
SELECT category, COUNT(*)*30 as cnt
from day1.My_table
group by category --- Note: I'm not considering the range defined from the user in this example.
) group by category;
의견에서도 언급했듯이 다음과 같은 쿼리를 수행해야합니다.
Select category, AVG(*)
from [fromRange-toRange].MyTable;
극단적 인 해결책을 위해, 나는 미래 사용자 (예 : marketng 사람들)가 이와 같은 쿼리를 수행 할 수 있도록 금속 언어를 구현하는 아이디어를 고려하고 있습니다.
메타 언어없이 Drill에서이를 수행 할 수있는 방법이 있다고 생각하십니까? 재귀 UDF를 사용 하여이 작업을 수행하지만 쿼리를 반환 할 수 없습니다.
모든 스냅 샷은 250GB가 커서이 데이터 세트를 다른 외부 데이터와 비교할 수 있기를 원합니다 (이러한 데이터 세트의 체계는 미리 알 수 없습니다).
Apache Drill에 적합한 솔루션이 있습니까? 아니면이 문제에 대한 또 다른 해결책이 있습니까?
또한이 문제에 관한 메타 언어 또는 논문도 높이 평가됩니다.
편집 : 거래 데이터가 없습니다. 시간이 지남에 따라 데이터를 추가하거나 제거 할 수 있습니다. 이러한 이유로 매일 스냅 샷이 필요합니다. 또한 수행 할 쿼리를 미리 알지 못하므로 어떤 유형의 집계를 수행해야하는지 알 수 없습니다. 또한 모든 행에는 약 100 개의 열이 있으며 스냅 샷당 250GB (Mysql 테이블)가 있습니다. 또한 가능한 한 매일 모든 행에서이 데이터에 대한 전체 텍스트 검색이 필요합니다.
검색의 예는 "어떤 주제에 대한 게시물이 몇 개입니까?" 따라서 일부 주제 키워드에 대한 모든 게시물을 검색해야합니다. 모든 스냅 샷의 행이 같거나 같지 않을 수 있습니다. 또한 두 개의 스냅 샷이 동일한 게시물을 가질 수 있지만 약간 수정되었습니다.
table definitions/structures