Color ADF เกิดข้อผิดพลาดเอ่อล้นออกมารวมอัตโนมัติเกิดข้อผิดพลาดในการเปลี่ยแสดงให้ข้อมูลประเภทน int ได้

0

คำถาม

ฉันกำลังทำงานอยู่กับ color ADF และฉันกำลังมีปัญหาตอนที่ผมเรียกประมวลผลนี้กับการค้นหาบน color ADF:

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

การส่งออกเป็นข้อผิดพลาด

เอ่อล้นออกมารวมอัตโนมัติ

แต่ถ้าฉันเปลี่ยน = ต้องเป็น >=การสืบค้นทำงานและกลับการแสดงผลหน้าจอ

คน TS เป็ UNIXTIMESTAMP เหมือน 1637680012264.

โดยใช้จากการรวมเข้าด้วยกันของ >= แล้ว < มันไม่โอเคเพราะฉันกำลังรับมือกับแปรงทางวัน(ฉันต้องการที่จะใช้ WHERE TS IN (date1, date2, etc...)

เป็นไปได้มั้ยที่ใครบางคนจะได้ช่วยฉัน? ขอบคุณล่วงหน้า

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

คำตอบที่ดีที่สุด

0

โดยเฉพาะฉันจะเปลี่ยนแปลงที่โต๊ะเพื่อทำการจัดเก็บ datetime2 ค่าของแทนที่จะเป็น convoluted epoch มาตั้งแต่หกขวบ

แต่สันนิษฐานได้เลยว่าคุณไม่สามารถซ่อมออกแบบ...

ต้อง Larnu เป็นประเด็นคุณไม่ต้องการจะปรับใช้ computations ต้องคอลัมน์และคุณอย่างแน่นอนไม่ต้องการจะปรับใช้ 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;

นี่ avoids มีการฟอร์แมตอยู่เหนือศีรษะ,convoluted และไม่จำเป็นต้องทำแบแปลง/n(TS ต้องเป็นอยู่แล้ว bigintมาถูกทางแลว....ดังนันทำไมที่ explicit CONVERT()?).


ถ้าคุณต้องการไม่มีแปรงทางวัน,โอเค,เรายังสามารถย่อมทำเรื่องนี้กับไกลน้อยการละเมิดของโต๊ะ แค่สร้าง#ชั่วคราวได้โต๊ะหรือโต๊ะตัวแปรกับส่วนที่คำนวณแล้วคอลัมน์,แทรกของคุณหลายครั้งในหลายวันอยู่ในนั้นแล้วริงๆข้างนรวมกัน

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;

มีอีกมากมาในวันที่แย่นิสัย&ที่ดีที่สุดที่ฝึก:

2021-11-23 15:46:34

ขอบคุณแอรอน,ถึงแม้ว่าทางแก้ของคุณมันไม่ใช่สิ่งที่ฉันกำลังมองหาคุณ illuminated ทีมของฉันกับ"นั้นไม่ใช่แหล่งที่มาของข้อผิดพลาด DATEADD นไม่มีทางที่จะเป็นสามารถเพิ่ม 3 เป็นพันๆล้านที่พวกเขาคิดวินาทีที่จะปี 1970. ดังนั้นบางทีอาจแบ่งแยกอีกครั้งและพยายามเพิ่ม...คนกล่าวไว้อาลัยนาทีถ้าคุณเป็นคนเดียวที่สนใจเรื่องเดทที่สอง-ระดับความถูกต้องไม่ควรเป็นเรื่องสำคัญ คุณสามารถกำหนดสองสามตัวอย่างเลือกค่าสำหรับ TS และคาดหวังผลตรวจสำหรับพวกนั้น". ดังนั้นแปลงที่ UNIXTIMESTAMP ในวันโดย divinding สำหรับ 60*60*1000*24
Salvatore Bonanno

@SalvatoreBonanno แต่นั่นยังคงเป็นเสื่อมสภาพทางที่จะช่วยแก้ปัญหาใดๆหรอกครับ คุณต้องการคณิตศาสตร์อยู่ที่อีกด้านหนึ่งของที่ไหนเงื่อนไขว่าเชื่อฉัน เว้นแต่ว่า TS คอลัมน์ไม่ได้สร้างดัชนีค้นหาและคุณรู้ความจริงคุณจะไม่มีวันดัชนีมัน
Aaron Bertrand

ใช่ผมเห็นทางออกกับคนชั่วคราวได้แล้ว ที่สุด problematic เรื่องนั้นฉันสามารถเดียวที่มีสิทธิ์ในการอ่านโต๊ะ(โต๊ะคืบคลาวด์)ดังนั้นฉันไม่ไม่รู้อะไรเลยเกี่ยวกับดัชนีบนมัน(มันอาจจะเป็นมุมมองด้วย!) . ดังนั้นคณิตศาสตร์ปัญหาแก้ปัญหาสำหรับตอนนี้,แต่ฉันจะพยายามปรับแต่งแล้วมันอย่างที่คุณบอกว่านะ
Salvatore Bonanno
-1

ฉัน repro จะอยู่ในท้องถิ่น ADF สภาพแวดล้อมและเป็นสามารถจะได้ผลตรเรียบร้อยแล้ว

ด้านล่างนี้เป็น ตัวอย่างโต๊ะ:

นี่ฉันมี 3 คนแถวกับวัน'2021-11-23'และ 2 แถวจาก'2021-11-24'. TS คอลัมน์มีเดทในระบบยูนิกซ์วันที่และเวลารูปแบบและ 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ý
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่