2014-09-04 2 views
3

비슷한 테이블 이름이 yyyymmdd로 끝나는 테이블을 포함하는 데이터 세트가 있습니다. 예를 들어 :BigQuery 데이터 세트의 최신 테이블 쿼리

myproject:mydataset.Sales20140815 
myproject:mydataset.Sales20140816 
myproject:mydataset.Sales20140817 
myproject:mydataset.Sales20140818 
... 
myproject:mydataset.Sales20140903 
myproject:mydataset.Sales20140904 

는 (: mydataset.Sales20140904이 myproject라는 것입니다 위의 예를 들어) 데이터 세트의 최신 테이블을 조회 할 BigQuery를 작성하는 방법은 없나요? 나는 매일 ETL에 포함 수정 생각할 수

답변

2

만 솔루션 :

A는 : 그것은로드되거나 업데이트 된 후에는 최신 테이블의 복사본을 만들려면 ETL을 업데이트합니다. bq 명령 줄 도구를 사용하는 경우 다음과 같은 형식이됩니다.

bq cp mydataset.Sales20140904 mydataset.SalesLatestDay 

그런 다음 SalesLatestDay 테이블에 대해 쿼리하면됩니다.

B : 가장 최근의 테이블 ("SELECT * FROM mydataset.Sales20140904")을 참조하는 뷰를 만들고 매일 업데이트하십시오. REST API를 사용하여보기를 만드는 방법에 대한 정보 : https://developers.google.com/bigquery/docs/reference/v2/tables#resource

2

표 와일드 카드 기능을 사용합니다. 최신 오늘날의 테이블 인 경우 마지막으로 변경된 표는 과거의 일이 될 수 있다면 ,

Select * from TABLE_DATE_RANG(MyDATASET.,Current_Timestamp(),Current_Timestamp()) 

를 사용합니다. 당신은 사용할 수 있습니다 :이 도움이

SELECT 
     * 
    FROM 
    TABLE_QUERY(MyDATASET, 
      'table_id CONTAINS "MyTable" 
      AND last_modified_time= (Select MAX(last_modified_time) 
            FROM MyDATASET.__TABLES__ 
            where table_id contains "MyTable")' 
       ) 

희망 ...

2
SELECT * 
FROM TABLE_QUERY(myproject:mydataset, 
    "table_id IN (
    SELECT table_id FROM myproject:mydataset.__TABLES__ 
    WHERE REGEXP_MATCH(table_id, r"^Sales.*") 
    ORDER BY creation_time DESC LIMIT 1)") 
7

N.N.을 대답은 좋지만 수정 날짜에 의존하는 것은 "최신"데이터로 잘못 가져온 이전 데이터 세트를 다시 가져 오는 경우 문제가됩니다. table_id가 날짜를 명시 적으로 올바른 순서로 나열하므로 해당 값을 직접 사용하는 것이 가장 좋습니다.

SELECT 
    * 
FROM 
TABLE_QUERY(MyDATASET, 
     'table_id CONTAINS "MyTable" 
     AND table_id= (Select MAX(table_id) 
           FROM MyDATASET.__TABLES__ 
           where table_id contains "MyTable")' 
      ) 
0

테이블이 매일 업데이트되면 여기에 내 트릭이 있습니다.

SELECT * FROM TABLE_DATE_RANGE(myproject:mydataset.Sales, CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP()) 
관련 문제