Azure ADF 오류산 오버플로 변환하는 중 오류가 발생한 표정 데이터 형식 int

0

질문

나 azure ADF 과 문제가 있을 때 저는 쿼리를 실행에 azure ADF:

SELECT COUNT(*) AS c
FROM TABLE 
WHERE CONVERT(date, (FORMAT(DATEADD(second, CONVERT(bigint, TS) / 1000, '19700101'), 'yyyy-MM-dd'))) = CONVERT(Date, GETDATE())

출력은 오류

산 오버플로우

그러나 변경하는 경우 =>=쿼리는 작동하고 반환 출력됩니다.

TSUNIXTIMESTAMP1637680012264.

의 조합을 사용하여 >=< 이 좋지 않기 때문에 나는 다루는 연속적이지 않습니다 일(를 사용해야 한다 WHERE TS IN (date1, date2, etc...)

할 수 있는 사람이 있었을까? 사전에 감사합니다

azure azure-data-factory sql sql-server
2021-11-23 15:02:27
2

최고의 응답

0

바람직하게,나는 변경을 저장하는 테이블 datetime2 대신 값의 복잡한 epoch 니다.

하지만 가정하면,당신이 해결할 수 없는 디자인...

을 Larnu 의점,당신은 당신을 원하지 않을 적용하는 계산을 열고,당신은 확실히하고 싶지 않아 적용 FORMAT() 양쪽문 FORMAT() 는 절대 개.

대신에,내가 찾는 것이 한계를 위한 오늘날,그리고 사용하는 개방형 범위에 있습니다. 이정 TS 열야 bigint:

DECLARE @d date = GETDATE();

DECLARE @start bigint = DATEDIFF(SECOND, '19700101', @d),
        @end   bigint = DATEDIFF(SECOND, '19700101', DATEADD(DAY, 1, @d));

SELECT COUNT(*) AS c
FROM dbo.[TABLE]
WHERE TS >= @start * 1000 
  AND TS <  @end   * 1000;

이 모든 형식 오버헤드 복잡하고 불필요한 변환식(TS 해야 합하는 것은 이미 bigint바로,유도 명시적 CONVERT()?).


필요한 경우 연속되지 않 날짜,확인,우리는 여전히 이를 위해 훨씬 적은 남용의 테이블. 들#temp 테이블 또는 테이블이 변수로 계산된 열 삽입하고 여러 날짜가 있습니다,그리고 그런 다음 외부에 가입니다.

DECLARE @d table
(
  d datetime2, 
  s AS CONVERT(bigint, 
    DATEDIFF(SECOND, '19700101', d)) * 1000,
  e AS CONVERT(bigint, 
    DATEDIFF(SECOND, '19700101', DATEADD(DAY, 1, d))) * 1000
);

INSERT @d(d) VALUES('20211123'),('20211007');

-- if you want a row per day:
SELECT d.d, COUNT(t.TS) AS c
FROM @d AS d
LEFT OUTER JOIN dbo.[TABLE] AS t
   ON  t.TS >= d.s
   AND t.TS <  d.e
GROUP BY d.d
ORDER BY d.d;

-- if you just want a total count:
SELECT COUNT(t.TS) AS c
FROM @d AS d
LEFT OUTER JOIN dbo.[TABLE] AS t
   ON  t.TS >= d.s
   AND t.TS <  d.e;

더 많은 날짜에 나쁜 습관&best practices:

2021-11-23 15:46:34

감사는 아론에도 불구하는 솔루션이 아니 내가 당신을 찾고 조명 팀으로"그의 원인이 아닌지 확인할 수 있습니다 오류가 있습니다. DATEADD 지를 추가할 수 있 3 억 초 1970. 그래서 어쩌면 다시 분할하고 추가 시도해 분는 경우에,당신은 단지에 대한 관심이 날짜를,두 번째 수준의 정확도 안 될 중요합니다. 을 제공할 수 있는 몇 가지의 샘플에 대한 값을 TS 및 예상 결과에 대한 사람들". 그래서 변환 UNIXTIMESTAMP 에서 일 divinding 한 60*60*1000*24
Salvatore Bonanno

@SalvatoreBonanno 하지만 여전히 매우 비효율적으로 문제를 해결하는 방법. 당신이 원하는 수학의 다른 측면에서는 절이 저를 신뢰한다. 지 않으면 TS 열성을 인덱싱하지 않고 사실을 알고 있을 것입니다 결코 인덱스습니다.
Aaron Bertrand

그래,내가 보는 솔루션으로 임시이다. 가장 문제가 물건은 수만 읽 액세스를 표(테이블에서 클라우드)그래서 나는지에 대해 아무것도 모르는 인덱스에서는(그것이 될 수 있습기다!) . 그래서 수학 문제 해결 문제에 대한 지금,하지만 하려고 합적으로 그것을 말했습니다.
Salvatore Bonanno
-1

I repro 면서 현지 ADF 환경 및 할 수 있었는 결과를 얻을 성공적으로.

아래 샘플 테이블:

여기에,나는 3 개의 행이 날짜'2021-11-23'와 행 2'에서2021-11-24'. TS 열은 날짜에 UNIX timestamp 형식과 dt_format 열의를 보여주는 것입 TS 에서 열 날짜 형식입니다.

enter image description here

ADF:

를 사용하여 조회가 활동,점점 수의 행 TS 열의 오늘의 날짜. (내가 사용하는 코드를 다른 테이블).

SELECT COUNT(*) AS c
FROM tb1 
WHERE CONVERT(date, (FORMAT(DATEADD(second, CONVERT(bigint, TS) / 1000, '19700101'), 'yyyy-MM-dd'))) = CONVERT(Date, GETDATE())

enter image description here

출력:

enter image description here

2021-11-23 15:28:21

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................