2017-09-11 1 views
0

단순화를 위해 다음과 같은 배열을 가지고 있습니다. arr[time]=[price,asset] (가격은 동일한 자산에 대해 초당 12 회까지 반복 될 수 있음).Amazon Redshift Time Series

다른 크기로 데이터를 볼 수 있기를 바랍니다. 1 시간당 1 샘플, 0.5 시간당 1 샘플로 2.5 년, 포인트 간 특정 틱에 액세스 할 수있는 5 년.

DynamoDB에서 다중 테이블을 사용하거나 Redshift에서 단일 데이터베이스를 사용하는 것이 더 경제적/편리합니까? 적색 변이에 어떤 스키마/테이블을 사용합니까?

편집 : 나는 반드시 출력에 큰 범위에 대한 모든 단일 가격 (그래서 클라이언트가 충돌하지 않음)하지 않으 WHERE time>=1504118343 AND time<=1505128343 같은 기간 사이에 검색 할 때 {'time':1505128343,'price':3.141708,'asset':1}처럼 보이는 실체가 대신 출력 매 n 번째를 싶습니다 가격. 범위가 충분히 큰 우리가 테이블 prices, prices30s, prices1h, prices1day 등의 일련있을 때, 그래서 만약 우리의 prices30s 테이블이 시리즈는 샘플링 것이다 대체되면, 그래서 내 구현에서

나는 다른 스케일에 대해 여러 개의 테이블이있는 것 30 초당 한 번.

+0

죄송합니다. 귀하의 요구 사항이 명확하지 않으므로 귀하의 질문에 답변하기가 어렵습니다. 테이블에 저장된 데이터 샘플과 실행할 샘플 쿼리를 표시 할 수 있습니까? "서로 다른 크기로 데이터보기"와 "점 사이의 특정 진드기에 액세스"란 무엇을 의미합니까? 그리고 '시간 [가격], [자산]'은 무엇을 의미합니까? –

+0

죄송합니다. 자신에 대해 제대로 설명하지 않으면 원래 게시물을 편집하고 정교하게 작성했습니다. – Max0999

+0

데이터를 무작위로 샘플링하는 것이 아니라 평균 (또는 최대) 시간당 가격, 평균 (또는 최대) 연간 가격 등과 같이 주어진 기간 동안 평균 가격을 제공하는 것이 더 좋지 않습니까? Amazon Redshift와 같은 데이터웨어 하우스는 이러한 유형의 계산을 아주 쉽게 처리 할 수 ​​있습니다. –

답변

1

n 번째 레코드마다 엄격하게 액세스하려는 경우 일부 정렬 조건에 따라 행 번호를 제공하는 창 함수를 사용할 수 있지만 성능 측면에서는 상당히 나쁠 수 있습니다. ,

WITH 
sorted_entities as (
    select 
    time 
    ,price 
    ,asset 
    ,row_number() over (partition by asset,time/60 order by time) 
    from entities_table 
) 
select time, price, asset 
from sorted_entities 
where row_number=1 

해당 쿼리는 자산 ID 및 유닉스 타임 스탬프 열의 정수 나눗셈을 사용하여 작은 그룹으로 테이블 행을 중단하고 모든 행 1,2 제공 : 그것은 매 60 초 간격 최초의 가격에 다음과 같이 작동합니다 3 등 정확한 시간을 기반으로하므로 숫자 1 행을 선택할 수 있습니다. 테이블의 정렬 키가 asset,time 인 경우 동일한 asset 행이 서로 더 가까워 지므로 더 빨리 작동합니다.

샘플링의 정밀도는 당신이 쉽게이 같이 할 수있는 우선 순위가 아닌 경우 : 0.0006944는 1/24/60입니다

select * from entities_table where random()<0.0006944 

(일일 100 % 확률로 간주, 24 시간에 의해 분할되어 60 분이면 1 분의 확률을 얻습니다.) 그러면 행의 1/1440이 무작위로 출력되고 행 수가 줄어들어 시간이 지남에 따라 값이 반씩 균등하게 분산됩니다.

또 다른 방법은 위의 권고대로 평균을 계산하는 것입니다.

관련 문제