SnowConvert: Teradata DML-Anweisungen¶
DELETE-Anweisung¶
Siehe DELETE-Anweisung
Teradata unterstützt den Aufruf von mehr als einer Tabelle in der FROM
-Klausel, Snowflake nicht. Daher ist es notwendig, die USING
-Klausel zu verwenden, um auf die zusätzlichen Tabellen zu verweisen, die an der Bedingung beteiligt sind.
Teradata
DEL FROM MY_TABLE ALL;
DEL FROM MY_TABLE_2 WHERE COL1 > 50;
DELETE T1 FROM TABLE1 T1, TABLE2 T2 WHERE T1.ID = T2.ID;
DELETE FROM TABLE1 T1, TABLE2 T2 WHERE T1.ID = T2.ID;
DELETE T1 FROM TABLE2 T2, TABLE1 T1 WHERE T1.ID = T2.ID;
DELETE FROM TABLE1 WHERE TABLE1.COLUMN1 = TABLE2.COLUMN2
Snowflake
DELETE FROM
MY_TABLE;
DELETE FROM
MY_TABLE_2
WHERE
COL1 > 50;
DELETE FROM
TABLE1 T1
USING TABLE2 T2
WHERE
T1.ID = T2.ID;
DELETE FROM
TABLE1 T1
USING TABLE2 T2
WHERE
T1.ID = T2.ID;
DELETE FROM
TABLE1 T1
USING TABLE2 T2
WHERE
T1.ID = T2.ID;
DELETE FROM
TABLE1
WHERE
TABLE1.COLUMN1 = TABLE2.COLUMN2;
Bekannte Probleme¶
1. DEL abbreviation unsupported¶
Die Abkürzung wird in Snowflake nicht unterstützt, aber sie wird korrekt übersetzt, wenn sie in DELETE geändert wird.
Mengenoperatoren¶
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Siehe Mengenoperatoren
Mengenoperatoren haben sowohl in Teradata als auch in Snowflake die gleiche Syntax und unterstützen die Szenarien EXCEPT
, INTERSECT
und UNION
mit Ausnahme der Klausel ALL
in INTERSECT ALL
, die in Snowflake nicht unterstützt wird, was dazu führt, dass der Teil des ALL
nach der Konvertierung als kommentierter Code erscheint.
Teradata
SELECT LastName, FirstName FROM employees
INTERSECT
SELECT FirstName, LastName FROM contractors;
SELECT LastName, FirstName FROM employees
INTERSECT ALL
SELECT FirstName, LastName FROM contractors;
Snowflake
SELECT
LastName,
FirstName FROM
employees
INTERSECT
SELECT
FirstName,
LastName FROM
contractors;
SELECT
LastName,
FirstName FROM
employees
INTERSECT
!!!RESOLVE EWI!!! /*** SSC-EWI-0040 - THE STATEMENT IS NOT SUPPORTED IN SNOWFLAKE ***/!!! ALL
SELECT
FirstName,
LastName FROM
contractors;
Bekannte Probleme¶
1. INTERSECT ALL unsupported¶
INTERSECT ALL wird in Snowflake nicht unterstützt und dann wird der Teil ALL kommentiert.
Zugehörige EWIs¶
[SSC-EWI-0040](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0040): Anweisung wird nicht unterstützt.
UPDATE-Anweisung¶
Siehe UPDATE-Anweisung
Teradata unterstützt den Verweis auf einen Alias, bevor dieser deklariert wird, Snowflake jedoch nicht. Die Transformation für dieses Szenario besteht darin, die referenzierte Tabelle zu nehmen und den Alias für den Tabellennamen zu ändern, auf den sie verweist.
Teradata
-- Case 1, THERE IS A REFERENCE TO TABLE2 IN THE SET CLAUSE WITHOUT A FROM
UPDATE CRASHDUMPS.TABLE1 i
SET COLUMN4 = CRASHDUMPS.TABLE2.COLUMN3
WHERE i.COLUMN1 = CRASHDUMPS.TABLE2.COLUMN1
AND i.COLUMN3 = 'L';
-- CASE 2, FORWARD ALIAS
UPDATE i
FROM CRASHDUMPS.TABLE2, CRASHDUMPS.TABLE1 i
SET COLUMN4 = CRASHDUMPS.TABLE2.COLUMN3
WHERE i.COLUMN1 = CRASHDUMPS.TABLE2.COLUMN1
AND i.COLUMN3 = 'L';
Snowflake
-- Case 1, THERE IS A REFERENCE TO TABLE2 IN THE SET CLAUSE WITHOUT A FROM
UPDATE CRASHDUMPS.PUBLIC.TABLE1 AS i
SET i.COLUMN4 = CRASHDUMPS.TABLE2.COLUMN3
WHERE i.COLUMN1 = CRASHDUMPS.TABLE2.COLUMN1
AND i.COLUMN3 = 'L';
-- CASE 2, FORWARD ALIAS
UPDATE CRASHDUMPS.PUBLIC.TABLE1 AS i
SET i.COLUMN4 = CRASHDUMPS.TABLE2.COLUMN3 FROM CRASHDUMPS.PUBLIC.TABLE2
WHERE i.COLUMN1 = CRASHDUMPS.TABLE2.COLUMN1
AND i.COLUMN3 = 'L';
Zugehörige EWIs¶
Keine zugehörigen EWIs.
WITH-Modifikator¶
Siehe WITH-Modifikator
Snowflake unterstützt den WITH
-Modifikator von Teradata für eine SELECT-Anweisung, die mehrere CTEs
(Common Table Expressions) enthält. Teradata unterstützt jede beliebige Reihenfolge der Definition von CTE, unabhängig davon, ob es vor seiner Deklaration referenziert wird oder nicht. Snowflake verlangt jedoch, dass, wenn eine CTE eine andere CTE aufruft, es vor dessen Aufruf definiert werden muss. Dann wird die umgewandelte Sequenz von CTEs innerhalb der WITH in die nicht referenzierte CTEs umgewandelt, dann die CTE, die die nächste CTE aufruft, und so weiter.
Wenn in der Aufrufsequenz von WITH ein Zyklus erkannt wird, wird dieser ohne Änderungen an der Sequenz belassen, wie in einem Beispiel für [SSC-EWI-TD0077](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/teradataEWI. md#ssc-ewi-td0077) Im folgenden Beispiel gibt es zwei CTEs mit den Namen n1 und n2, wobei sich n1 auf n2 bezieht. Dann muss n2 zuerst in Snowflake als der entsprechende konvertierte Code definiert werden.
Bemerkung
Einige Teile des Ausgabecodes werden aus Gründen der Übersichtlichkeit weggelassen.
Teradata
WITH recursive n1(c1) as (select c1, c3 from t2, n1),
n2(c2) as (select c2 from tablex)
SELECT * FROM t1;
Snowflake
WITH RECURSIVE n1(c1) AS
(
SELECT
c1,
c3 from
t2, n1
),
n2(c2) AS
(
SELECT
c2 from
tablex
)
SELECT
* FROM
t1;
Bekannte Probleme¶
1. Impossible to reorder when cycles were found¶
Wenn die CTEs-Referenzen analysiert werden und ein Zyklus zwischen den Aufrufen der CTEs liegt, werden die CTEs nicht geordnet.
Zugehörige EWIs¶
Keine zugehörigen EWIs.
INSERT-Anweisung¶
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Siehe INSERT-Anweisung
In Teradata gibt es eine alternativeINSERT
-Syntax, die den Wert für jede Tabellenspalte inline zuweist. Diese alternative Struktur erfordert eine spezielle Transformation, um in Snowflake unterstützt zu werden. Die Inline-Zuweisung der Werte wird getrennt und innerhalb des VALUES(...)
-Teils der Snowflake INSERT INTO
-Anweisung platziert.
Teradata
INSERT INTO appDB.logTable (
process_name = 'S2F_BOOKS_LOAD_NEW'
, session_id = 105678989
, message_txt = ''
, message_ts = '2019-07-23 00:00:00'
, Insert_dt = CAST((CURRENT_TIMESTAMP(0)) AS DATE FORMAT 'YYYY-MM-DD'));
Snowflake
INSERT INTO appDB.logTable (
process_name, session_id, message_txt, message_ts, Insert_dt)
VALUES ('S2F_BOOKS_LOAD_NEW', 105678989, '', '2019-07-23 00:00:00', TO_DATE((CURRENT_TIMESTAMP(0))));
Bekannte Probleme ¶
Es wurden keine Probleme gefunden.
Zugehörige EWIs ¶
Keine zugehörigen EWIs.
LOGGING ERRORS¶
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Bemerkung
Nicht relevante Anweisung.
Warnung
Beachten Sie, dass diese Anweisung aus der Migration entfernt wurde, da sie eine nicht relevante Syntax darstellt. Das bedeutet, dass sie in Snowflake nicht erforderlich ist.
Beschreibung¶
Anweisung zur Protokollierung von Fehlern bei der Verwendung von Anweisungen als INSERT...SELECT.
Bitte lesen Sie die folgende Dokumentation.
Beispielhafte Quellcode-Muster¶
LOGGING ERRORS¶
Beachten Sie in diesem Beispiel, dass LOGGING ERRORS
entfernt wurde, weil es keine relevante Syntax ist. Die Syntax ist in Snowflake nicht erforderlich.
INSERT INTO MY_TABLE
SELECT *
FROM MY_SAMPLE
LOGGING ERRORS;
INSERT INTO MY_TABLE SELECT
*
FROM
MY_SAMPLE;
LOGGING ALL ERRORS¶
Beachten Sie in diesem Beispiel, dass LOGGING ALL ERRORS
entfernt wurde, weil es keine relevante Syntax ist. Die Syntax ist in Snowflake nicht erforderlich.
INSERT INTO MY_TABLE
SELECT *
FROM MY_SAMPLE
LOGGING ALL ERRORS;
INSERT INTO MY_TABLE SELECT
*
FROM
MY_SAMPLE;
LOGGING ERRORS WITH NO LIMIT¶
Beachten Sie in diesem Beispiel, dass LOGGING ERRORS WITH NO LIMIT
entfernt wurde, weil es keine relevante Syntax ist. Die Syntax ist in Snowflake nicht erforderlich.
INSERT INTO MY_TABLE
SELECT *
FROM MY_SAMPLE
LOGGING ERRORS WITH NO LIMIT;
INSERT INTO MY_TABLE SELECT
*
FROM
MY_SAMPLE;
LOGGING ERRORS WITH LIMIT OF¶
Beachten Sie in diesem Beispiel, dass LOGGING ERRORS WITH LIMIT OF
entfernt wurde, weil es keine relevante Syntax ist. Die Syntax ist in Snowflake nicht erforderlich.
INSERT INTO MY_TABLE
SELECT *
FROM MY_SAMPLE
LOGGING ERRORS WITH LIMIT OF 100;
INSERT INTO MY_TABLE SELECT
*
FROM
MY_SAMPLE;
Bekannte Probleme ¶
Es wurden keine Probleme gefunden.
Zugehörige EWIs ¶
Keine zugehörigen EWIs.
SELECT-Anweisung¶
Siehe SELECT-Anweisung
Snowflake unterstützt die SELECT
-Syntax von Teradata mit ein paar Ausnahmen. Vor allem unterstützt es nicht die Abkürzung SEL
.
Teradata
SEL DISTINCT col1, col2 FROM table1
Snowflake
SELECT DISTINCT col1,
col2 FROM
table1;
Teradata unterstützt den Verweis auf einen Alias, bevor dieser deklariert wird, Snowflake jedoch nicht. Die Transformation für dieses Szenario besteht darin, die referenzierte Spalte zu nehmen und den Alias für den Spaltennamen zu ändern, auf den sie verweist.
Teradata
SELECT
my_val, sum(col1),
col2 AS my_val FROM table1
Snowflake
SELECT
my_val,
sum(col1),
col2 AS my_val FROM
table1;
Entfernte Klausel-Optionen¶
Die folgenden Klausel-Optionen sind für Snowflake nicht relevant, daher werden sie bei der Migration entfernt.
Teradata |
Snowflake |
---|---|
Expand on |
Nicht unterstützt |
NORMALIZE |
Nicht unterstützt |
Mit Prüfoption (Abfrage) |
Nicht unterstützt |
Bekannte Probleme¶
1. SEL abbreviation unsupported¶
Die Abkürzung wird in Snowflake nicht unterstützt, aber sie wird korrekt übersetzt, wenn sie in SELECT geändert wird.
Zugehörige EWIs¶
Keine zugehörigen EWIs.
ANY-Prädikat¶
Warnung
Dies ist eine in Arbeit befindliche Version, Änderungen können in Zukunft vorgenommen werden.
Beschreibung¶
In Teradata ist die Quantifizierung in einer Vergleichsoperation oder einem IN/NOT IN Prädikat möglich. Der Vergleich von Ausdruck und mindestens einem Wert in der Menge der von der Unterabfrage zurückgegebenen Werte ist „true“. Bitte lesen Sie die folgende Teradata-Dokumentation für weitere Informationen.
Teradata-Syntax
{ expression quantifier ( literal [ {, | OR} ... ] ) |
{ expression | ( expression [,...] ) } quantifier ( subquery )
}
Wo Quantifizierer:
{ comparison_operator [ NOT ] IN } { ALL |ANY | SOME }
Snowflake-Syntax
In Form einer Unterabfrage entspricht IN = ANY
und NOT IN entspricht <> ALL
. In der folgenden Snowflake-Dokumentation finden Sie weitere Informationen.
So vergleichen Sie einzelne Werte:
<value> [ NOT ] IN ( <value_1> [ , <value_2> ... ] )
So vergleichen Sie_row constructors_ (eingeklammerte Listen von Werten):
( <value_A> [, <value_B> ... ] ) [ NOT ] IN ( ( <value_1> [ , <value_2> ... ] ) [ , ( <value_3> [ , <value_4> ... ] ) ... ] )
So vergleichen Sie einen Wert mit den von einer Unterabfrage zurückgegebenen Werten:
<value> [ NOT ] IN ( <subquery> )
Sample Source Patterns
Beispieldaten
Teradata
CREATE TABLE Employee (
EmpNo INT,
Name VARCHAR(100),
DeptNo INT
);
INSERT INTO Employee (EmpNo, Name, DeptNo)
VALUES (1, 'Alice', 100);
INSERT INTO Employee (EmpNo, Name, DeptNo)
VALUES (2, 'Bob', 300);
INSERT INTO Employee (EmpNo, Name, DeptNo)
VALUES (3, 'Charlie', 500);
INSERT INTO Employee (EmpNo, Name, DeptNo)
VALUES (4, 'David', 200);
INSERT INTO Employee (EmpNo, Name, DeptNo)
VALUES (5, 'Eve', 100);
Snowflake
CREATE OR REPLACE TABLE Employee (
EmpNo INT,
Name VARCHAR(100),
DeptNo INT
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "teradata", "convertedOn": "01/14/2025", "domain": "test" }}'
;
INSERT INTO Employee (EmpNo, Name, DeptNo)
VALUES (1, 'Alice', 100);
INSERT INTO Employee (EmpNo, Name, DeptNo)
VALUES (2, 'Bob', 300);
INSERT INTO Employee (EmpNo, Name, DeptNo)
VALUES (3, 'Charlie', 500);
INSERT INTO Employee (EmpNo, Name, DeptNo)
VALUES (4, 'David', 200);
INSERT INTO Employee (EmpNo, Name, DeptNo)
VALUES (5, 'Eve', 100);
Gleichwertiges ANY-Prädikat in der WHERE-Klausel
Teradata
SELECT DeptNo
FROM Employee
WHERE DeptNo = ANY(100,300,500) ;
DeptNo |
---|
100 |
500 |
100 |
300 |
Snowflake
SELECT DeptNo
FROM Employee
WHERE DeptNo IN(100,300,500) ;
DeptNo |
---|
100 |
500 |
100 |
300 |
Andere Vergleichsoperatoren in der WHERE-Klausel
Wenn es andere Vergleichsoperatoren gibt, besteht die entsprechende Übersetzung darin, eine Unterabfrage mit der erforderlichen Logik hinzuzufügen.
Teradata
SELECT Name, DeptNo
FROM Employee
WHERE DeptNo < ANY(100,300,500) ;
Name |
DeptNo |
---|---|
Eva |
100 |
Alice |
100 |
David |
200 |
Bob |
300 |
Snowflake
SELECT Name, DeptNo
FROM Employee
WHERE DeptNo < ANY
(SELECT DeptNo
FROM Employee
WHERE DeptNo > 100
OR DeptNo > 300
OR DeptNo > 500);
NAME |
DEPTNO |
---|---|
Alice |
100 |
Eva |
100 |
Bob |
300 |
David |
200 |
IN ANY in WHERE-Klausel
Teradata
SELECT DeptNo
FROM Employee
WHERE DeptNo IN ANY(100,300,500) ;
DeptNo |
---|
100 |
500 |
100 |
300 |
Snowflake
SELECT DeptNo
FROM Employee
WHERE DeptNo IN(100,300,500) ;
DeptNo |
---|
100 |
500 |
100 |
300 |
NOT IN ALL in WHERE-Klausel
Teradata
SELECT Name, DeptNo
FROM Employee
WHERE DeptNo NOT IN ALL(100, 200);
Name |
DeptNo |
---|---|
Charlie |
500 |
Bob |
300 |
Snowflake
SELECT Name, DeptNo
FROM Employee
WHERE DeptNo NOT IN (100, 200);
Name |
DeptNo |
---|---|
Charlie |
500 |
Bob |
300 |
Known Issues
NOT IN ANY in WHERE-Klausel
Teradata
SELECT Name, DeptNo
FROM Employee
WHERE DeptNo NOT IN ANY(100, 200);
Name |
DeptNo |
---|---|
Eva |
100 |
Charlie |
500 |
Alice |
100 |
David |
200 |
Bob |
300 |
Snowflake
SELECT Name, DeptNo
FROM Employee
WHERE DeptNo IN (100, 200)
OR DeptNo NOT IN (100, 200);
Name |
DeptNo |
---|---|
Eva |
100 |
Charlie |
500 |
Alice |
100 |
David |
200 |
Bob |
300 |
Related EWIs
Keine zugehörigen EWIs.
EXPAND ON-Klausel
Description
Die EXPAND ON-Klausel erweitert eine Spalte mit dem Datentyp Zeitraum und erstellt eine regelmäßige Zeitreihe von Zeilen, die auf dem Zeitraumwert in der Eingabezeile basiert. Weitere Informationen zur EXPAND ON-Klausel finden Sie in der Teradata-Dokumentation.
Sample Source Patterns
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Beispieldaten¶
CREATE TABLE table1 (id INTEGER, pd PERIOD (TIMESTAMP));
INSERT INTO
table1
VALUES
(
1,
PERIOD(
TIMESTAMP '2022-05-23 10:15:20.00009',
TIMESTAMP '2022-05-23 10:15:25.000012'
)
);
CREATE OR REPLACE TABLE table1 (
id INTEGER,
pd VARCHAR(58) !!!RESOLVE EWI!!! /*** SSC-EWI-TD0053 - SNOWFLAKE DOES NOT SUPPORT THE PERIOD DATATYPE, ALL PERIODS ARE HANDLED AS VARCHAR INSTEAD ***/!!!
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;
INSERT INTO table1
VALUES (
1, PUBLIC.PERIOD_UDF(
TIMESTAMP '2022-05-23 10:15:20.00009',
TIMESTAMP '2022-05-23 10:15:25.000012'
) !!!RESOLVE EWI!!! /*** SSC-EWI-TD0053 - SNOWFLAKE DOES NOT SUPPORT THE PERIOD DATATYPE, ALL PERIODS ARE HANDLED AS VARCHAR INSTEAD ***/!!!);
EXPAND ON-Klausel¶
Angenommen, Sie möchten die Spalte für den Zeitraum um Sekunden erweitern. Für diese EXPAND ON-Klausel gibt es eine Erweiterung des Ankerzeitraums und eine Erweiterung des Intervallliterales.
Erweiterung des Ankerzeitraums
SELECT
id,
BEGIN(bg)
FROM
table1 EXPAND ON pd AS bg BY ANCHOR ANCHOR_SECOND;
id |
BEGIN (bg) |
---|---|
1 |
2022-05-23 10:15:21,0000 |
1 |
2022-05-23 10:15:22,0000 |
1 |
2022-05-23 10:15:23,0000 |
1 |
2022-05-23 10:15:24,0000 |
1 |
2022-05-23 10:15:25,0000 |
Snowflake unterstützt die EXPAND ON-Klausel nicht. Um die gleichen Ergebnisse und die gleiche Funktionalität zu reproduzieren, wird der Teradata SQL-Code in einem CTE-Block enthalten, mit einer EXPAND\_ON\_UDF- und TABLE-Funktion gespeichert. Die FLATTEN-Funktion verwendet, um mehrere Zeilen zurückzugeben, ROW\_COUNT\_UDF und DIFF\_TTIME\_PERIOD\_UDF werden verwendet, um anzuzeigen, wie viele Zeilen benötigt werden und die Rückgabe von VALUE hilft EXPAND\_ON\_UDF dabei, die verschiedenen regelmäßigen Zeitreihen zu berechnen. Dieser CTE-Block gibt denselben Alias für die zu erweiternden Spalten zurück wie in der EXPAND ON-Klausel, so dass das Ergebnis in jeder Verwendung des Datentyps Zeitraum verwendet werden kann.
WITH ExpandOnCTE AS
(
SELECT
PUBLIC.EXPAND_ON_UDF('ANCHOR_SECOND', VALUE, pd) bg
FROM
table1,
TABLE(FLATTEN(PUBLIC.ROW_COUNT_UDF(PUBLIC.DIFF_TIME_PERIOD_UDF('ANCHOR_SECOND', pd))))
)
SELECT
id,
PUBLIC.PERIOD_BEGIN_UDF(bg) !!!RESOLVE EWI!!! /*** SSC-EWI-TD0053 - SNOWFLAKE DOES NOT SUPPORT THE PERIOD DATATYPE, ALL PERIODS ARE HANDLED AS VARCHAR INSTEAD ***/!!!
FROM
table1,
ExpandOnCTE;
id |
PERIOD_BEGIN\_UDF(bg) |
---|---|
1 |
2022-05-23 10:15:21,0000 |
1 |
2022-05-23 10:15:22,0000 |
1 |
2022-05-23 10:15:23,0000 |
1 |
2022-05-23 10:15:24,0000 |
1 |
2022-05-23 10:15:25,0000 |
Bekannte Probleme¶
Die EXPAND ON-Klausel kann eine Erweiterung von Intervall-Literalen verwenden. In diesem Fall fügt SnowConvert einen Fehler hinzu, dass diese Übersetzung geplant ist.
Erweiterung von Intervall-Literalen¶
SELECT
id,
BEGIN(bg)
FROM
table1 EXPAND ON pd AS bg BY INTERVAL '1' SECOND;
id |
BEGIN(bg) |
---|---|
1 |
2022-05-23 10:15:20,0000 |
1 |
2022-05-23 10:15:21,0000 |
1 |
2022-05-23 10:15:22,0000 |
1 |
2022-05-23 10:15:23,0000 |
1 |
2022-05-23 10:15:24,0000 |
SELECT
id,
PUBLIC.PERIOD_BEGIN_UDF(bg) !!!RESOLVE EWI!!! /*** SSC-EWI-TD0053 - SNOWFLAKE DOES NOT SUPPORT THE PERIOD DATATYPE, ALL PERIODS ARE HANDLED AS VARCHAR INSTEAD ***/!!!
FROM
table1
!!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'EXPAND ON' NODE ***/!!!
EXPAND ON pd AS bg BY INTERVAL '1' SECOND;
Zugehörige EWIs¶
[SSC-EWI-0073](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0073): Überprüfung der Funktionsäquivalenz ausstehend.
[SSC-EWI-TD0053](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/teradataEWI. md#ssc-ewi-td0053): Snowflake unterstützt den Datentyp Zeitraum nicht, alle Zeiträume werden stattdessen als Varchar behandelt.
NORMALIZE¶
Beschreibung¶
NORMALIZE legt fest, dass Werte für den Zeitraum in der Spalte des ersten Zeitraums, die übereinstimmen oder sich überschneiden, zu einem Zeitraum zusammengefasst werden, die die Einzelwerte des Zeitraums umfasst. Weitere Informationen zur NORMALIZE-Klausel finden Sie in der Teradata-Dokumentation.
Beispielhafte Quellcode-Muster¶
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Beispieldaten¶
CREATE TABLE project (
emp_id INTEGER,
project_name VARCHAR(20),
dept_id INTEGER,
duration PERIOD(DATE)
);
INSERT INTO project
VALUES
(
10,
'First Phase',
1000,
PERIOD(DATE '2010-01-10', DATE '2010-03-20')
);
INSERT INTO project
VALUES
(
10,
'First Phase',
2000,
PERIOD(DATE '2010-03-20', DATE '2010-07-15')
);
INSERT INTO project
VALUES
(
10,
'Second Phase',
2000,
PERIOD(DATE '2010-06-15', DATE '2010-08-18')
);
INSERT INTO project
VALUES
(
20,
'First Phase',
2000,
PERIOD(DATE '2010-03-10', DATE '2010-07-20')
);
INSERT INTO project
VALUES
(
20,
'Second Phase',
1000,
PERIOD(DATE '2020-05-10', DATE '2020-09-20')
);
CREATE OR REPLACE TABLE project (
emp_id INTEGER,
project_name VARCHAR(20),
dept_id INTEGER,
duration VARCHAR(24) !!!RESOLVE EWI!!! /*** SSC-EWI-TD0053 - SNOWFLAKE DOES NOT SUPPORT THE PERIOD DATATYPE, ALL PERIODS ARE HANDLED AS VARCHAR INSTEAD ***/!!!
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;
INSERT INTO project
VALUES (
10,
'First Phase',
1000, PUBLIC.PERIOD_UDF(DATE '2010-01-10', DATE '2010-03-20') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0053 - SNOWFLAKE DOES NOT SUPPORT THE PERIOD DATATYPE, ALL PERIODS ARE HANDLED AS VARCHAR INSTEAD ***/!!!);
INSERT INTO project
VALUES (
10,
'First Phase',
2000, PUBLIC.PERIOD_UDF(DATE '2010-03-20', DATE '2010-07-15') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0053 - SNOWFLAKE DOES NOT SUPPORT THE PERIOD DATATYPE, ALL PERIODS ARE HANDLED AS VARCHAR INSTEAD ***/!!!);
INSERT INTO project
VALUES (
10,
'Second Phase',
2000, PUBLIC.PERIOD_UDF(DATE '2010-06-15', DATE '2010-08-18') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0053 - SNOWFLAKE DOES NOT SUPPORT THE PERIOD DATATYPE, ALL PERIODS ARE HANDLED AS VARCHAR INSTEAD ***/!!!);
INSERT INTO project
VALUES (
20,
'First Phase',
2000, PUBLIC.PERIOD_UDF(DATE '2010-03-10', DATE '2010-07-20') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0053 - SNOWFLAKE DOES NOT SUPPORT THE PERIOD DATATYPE, ALL PERIODS ARE HANDLED AS VARCHAR INSTEAD ***/!!!);
INSERT INTO project
VALUES (
20,
'Second Phase',
1000, PUBLIC.PERIOD_UDF(DATE '2020-05-10', DATE '2020-09-20') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0053 - SNOWFLAKE DOES NOT SUPPORT THE PERIOD DATATYPE, ALL PERIODS ARE HANDLED AS VARCHAR INSTEAD ***/!!!);
NORMALIZE-Klausel¶
Nehmen wir an, Sie möchten die NORMALIZE-Klausel mit der Mitarbeiter-ID verwenden.
SELECT
NORMALIZE emp_id,
duration
FROM
project;
EMP_ID |
DURATION |
---|---|
20 |
(2010-03-10, 2010-07-20) |
10 |
(2010-01-10, 2010-08-18) |
20 |
(2020-05-10, 2010-09-20) |
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0079 - THE REQUIRED PERIOD TYPE COLUMN WAS NOT FOUND ***/!!!
WITH NormalizeCTE AS
(
SELECT
T1.*,
SUM(GroupStartFlag)
OVER (
PARTITION BY
emp_id, duration
ORDER BY
PeriodColumn_begin
ROWS UNBOUNDED PRECEDING) GroupID
FROM
(
SELECT
emp_id,
duration,
PUBLIC.PERIOD_BEGIN_UDF(PeriodColumn) PeriodColumn_begin,
PUBLIC.PERIOD_END_UDF(PeriodColumn) PeriodColumn_end,
(CASE
WHEN PeriodColumn_begin <= LAG(PeriodColumn_end)
OVER (
PARTITION BY
emp_id, duration
ORDER BY
PeriodColumn_begin,
PeriodColumn_end)
THEN 0
ELSE 1
END) GroupStartFlag
FROM
project
) T1
)
SELECT
emp_id,
duration,
PUBLIC.PERIOD_UDF(MIN(PeriodColumn_begin), MAX(PeriodColumn_end))
FROM
NormalizeCTE
GROUP BY
emp_id,
duration,
GroupID;
EMP_ID |
PUBLIC.PERIOD_UDF(MIN(START_DATE), MAX(END\_DATE)) |
---|---|
20 |
2020-05-10*2010-09-20 |
20 |
2010-03-10*2010-07-20 |
10 |
2010-01-10*2010-08-18 |
Bekannte Probleme¶
Die Klausel kann ON MEETS OR OVERLAPS, ON OVERLAPS oder ON OVERLAPS OR MEETS verwenden. In diesen Fällen wird SnowConvert einen Fehler hinzufügen, dass diese Übersetzung für die Zukunft geplant ist.
SELECT NORMALIZE ON MEETS OR OVERLAPS emp_id, duration FROM table1;
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'NORMALIZE SET QUANTIFIER' NODE ***/!!!
NORMALIZE ON MEETS OR OVERLAPS emp_id,
duration FROM
table1;
Zugehörige EWIs¶
[SSC-EWI-0073](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0073): Überprüfung der Funktionsäquivalenz ausstehend.
[SSC-EWI-TD0079](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/teradataEWI. md#ssc-ewi-td0079): Die erforderliche Spalte für den Zeitraumtyp wurde nicht gefunden.
[SSC-EWI-TD0053](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/teradataEWI. md#ssc-ewi-td0053): Snowflake unterstützt den Datentyp Zeitraum nicht, alle Zeiträume werden stattdessen als Varchar behandelt.
Reset When¶
Beschreibung¶
„Reset When“ bestimmt die Partition, auf der eine SQL Fensterfunktion basierend auf einer bestimmten Bedingung arbeitet. Wenn die Bedingung „true“ lautet, wird eine neue dynamische Unterpartition innerhalb der bestehenden Fensterpartition erstellt. Weitere Informationen zu „Reset When“ finden Sie in der [Teradata-Dokumentation] (https://docs.teradata.com/reader/1DcoER_KpnGTfgPinRAFUw/b7wL86OoMTPno6hrSPNdDg).
Beispielhafte Quellcode-Muster¶
Beispieldaten¶
Teradata
CREATE TABLE account_balance
(
account_id INTEGER NOT NULL,
month_id INTEGER,
balance INTEGER
)
UNIQUE PRIMARY INDEX (account_id, month_id);
INSERT INTO account_balance VALUES (1, 1, 60);
INSERT INTO account_balance VALUES (1, 2, 99);
INSERT INTO account_balance VALUES (1, 3, 94);
INSERT INTO account_balance VALUES (1, 4, 90);
INSERT INTO account_balance VALUES (1, 5, 80);
INSERT INTO account_balance VALUES (1, 6, 88);
INSERT INTO account_balance VALUES (1, 7, 90);
INSERT INTO account_balance VALUES (1, 8, 92);
INSERT INTO account_balance VALUES (1, 9, 10);
INSERT INTO account_balance VALUES (1, 10, 60);
INSERT INTO account_balance VALUES (1, 11, 80);
INSERT INTO account_balance VALUES (1, 12, 10);
account_id |
month_id |
balance |
---|---|---|
1 |
1 |
60 |
1 |
2 |
99 |
1 |
3 |
94 |
1 |
4 |
90 |
1 |
5 |
80 |
1 |
6 |
88 |
1 |
7 |
90 |
1 |
8 |
92 |
1 |
9 |
10 |
1 |
10 |
60 |
1 |
11 |
80 |
1 |
12 |
10 |
Snowflake
CREATE OR REPLACE TABLE account_balance (
account_id INTEGER NOT NULL,
month_id INTEGER,
balance INTEGER,
UNIQUE (account_id, month_id)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;
INSERT INTO account_balance
VALUES (1, 1, 60);
INSERT INTO account_balance
VALUES (1, 2, 99);
INSERT INTO account_balance
VALUES (1, 3, 94);
INSERT INTO account_balance
VALUES (1, 4, 90);
INSERT INTO account_balance
VALUES (1, 5, 80);
INSERT INTO account_balance
VALUES (1, 6, 88);
INSERT INTO account_balance
VALUES (1, 7, 90);
INSERT INTO account_balance
VALUES (1, 8, 92);
INSERT INTO account_balance
VALUES (1, 9, 10);
INSERT INTO account_balance
VALUES (1, 10, 60);
INSERT INTO account_balance
VALUES (1, 11, 80);
INSERT INTO account_balance
VALUES (1, 12, 10);
account_id |
month_id |
balance |
---|---|---|
1 |
1 |
60 |
1 |
2 |
99 |
1 |
3 |
94 |
1 |
4 |
90 |
1 |
5 |
80 |
1 |
6 |
88 |
1 |
7 |
90 |
1 |
8 |
92 |
1 |
9 |
10 |
1 |
10 |
60 |
1 |
11 |
80 |
1 |
12 |
10 |
Reset When¶
Nehmen wir an, Sie möchten für jedes Konto die Abfolge der aufeinanderfolgenden monatlichen Saldoerhöhungen analysieren. Wenn der Saldo eines Monats kleiner oder gleich dem Saldo des Vormonats ist, müssen Sie den Zähler auf Null zurücksetzen und neu starten.
Um diese Daten zu analysieren, verwendet Teradata SQL eine Fensterfunktion mit einem verschachtelten Aggregat und einer Anweisung „Reset When“, wie folgt:
Teradata¶
SELECT
account_id,
month_id,
balance,
(
ROW_NUMBER() OVER (
PARTITION BY account_id
ORDER BY
month_id RESET WHEN balance <= SUM(balance) OVER (
PARTITION BY account_id
ORDER BY month_id
ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING
)
) -1
) AS balance_increase
FROM account_balance
ORDER BY 1, 2;
account_id | month_id | balance | balance_increase |
---|---|---|---|
1 | 1 | 60 | 0 |
1 | 2 | 99 | 1 |
1 | 3 | 94 | 0 |
1 | 4 | 90 | 0 |
1 | 5 | 80 | 0 |
1 | 6 | 88 | 1 |
1 | 7 | 90 | 2 |
1 | 8 | 92 | 3 |
1 | 9 | 10 | 0 |
1 | 10 | 60 | 1 |
1 | 11 | 80 | 2 |
1 | 12 | 10 | 0 |
Snowflake
Snowflake unterstützt die RESET WHEN-Klausel in Fensterfunktionen nicht. Um das gleiche Ergebnis zu erzielen, muss der Teradata SQL-Code mit der nativen SQL-Syntax und verschachtelten Unterabfragen wie folgt übersetzt werden:
SELECT
account_id,
month_id,
balance,
(
ROW_NUMBER() OVER (
PARTITION BY
account_id, new_dynamic_part
ORDER BY
month_id
) -1
) AS balance_increase
FROM
(
SELECT
account_id,
month_id,
balance,
previous_value,
SUM(dynamic_part) OVER (
PARTITION BY account_id
ORDER BY month_id
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
) AS new_dynamic_part
FROM
(
SELECT
account_id,
month_id,
balance,
SUM(balance) OVER (
PARTITION BY account_id
ORDER BY month_id
ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING
) AS previous_value,
(CASE
WHEN balance <= previous_value
THEN 1
ELSE 0
END) AS dynamic_part
FROM
account_balance
)
)
ORDER BY 1, 2;
account_id | month_id | balance | balance_increase |
---|---|---|---|
1 | 1 | 60 | 0 |
1 | 2 | 99 | 1 |
1 | 3 | 94 | 0 |
1 | 4 | 90 | 0 |
1 | 5 | 80 | 0 |
1 | 6 | 88 | 1 |
1 | 7 | 90 | 2 |
1 | 8 | 92 | 3 |
1 | 9 | 10 | 0 |
1 | 10 | 60 | 1 |
1 | 11 | 80 | 2 |
1 | 12 | 10 | 0 |
Zwei verschachtelte Abfragen sind erforderlich, um die Funktion „Reset When“ Snowflake zu unterstützen.
In der inneren Unterabfrage wird ein dynamisches Partitionskennzeichen (dynamic_part) erstellt und ausgefüllt. dynamic_part wird auf 1 gesetzt, wenn der Saldo eines Monats kleiner oder gleich dem Saldo des Vormonats ist; andernfalls wird er auf 0 gesetzt.
In der nächsten Ebene wird ein neues Attribut _dynamic_part als Ergebnis einer SUM Fensterfunktion erzeugt.
Schließlich wird ein new_dynamic_part als neues Partitionsattribut (dynamische Partition) zum bestehenden Partitionsattribut (account_id) hinzugefügt und die gleiche ROW_NUMBER() Fensterfunktion wie in Teradata angewendet.
Nach diesen Änderungen erzeugt Snowflake die gleiche Ausgabe wie Teradata.
„Reset When“, wenn die bedingte Fensterfunktion eine Spalte ist¶
Dasselbe Beispiel wie oben, nur dass jetzt die Fensterfunktion, die in der Bedingung RESET WHEN verwendet wird, als eine Spalte mit dem Namen vorherige
definiert ist. Diese Variante ändert die Transformation leicht, da es nicht mehr notwendig ist, die vorheriger_Wert
wie im vorherigen Beispiel zu definieren. Es ist die gleiche Umgehungsmöglichkeit.
Teradata
SELECT
account_id,
month_id,
balance,
SUM(balance) OVER (
PARTITION BY account_id
ORDER BY month_id
ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING
) AS previous,
(
ROW_NUMBER() OVER (
PARTITION BY account_id
ORDER BY
month_id RESET WHEN balance <= previous
)
) AS balance_increase
FROM account_balance
ORDER BY 1, 2;
account_id | month_id | balance | previous | balance_increase |
---|---|---|---|---|
1 | 1 | 60 | 0 | |
1 | 2 | 99 | 60 | 1 |
1 | 3 | 94 | 99 | 0 |
1 | 4 | 90 | 94 | 0 |
1 | 5 | 80 | 90 | 0 |
1 | 6 | 88 | 80 | 1 |
1 | 7 | 90 | 88 | 2 |
1 | 8 | 92 | 90 | 3 |
1 | 9 | 10 | 92 | 0 |
1 | 10 | 60 | 10 | 1 |
1 | 11 | 80 | 60 | 2 |
1 | 12 | 10 | 80 | 0 |
Snowflake
SELECT
account_id,
month_id,
balance,
SUM(balance) OVER (
PARTITION BY account_id
ORDER BY month_id
ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING
) AS previous,
(
ROW_NUMBER() OVER (
PARTITION BY
account_id, new_dynamic_part
ORDER BY
month_id
)
) AS balance_increase
FROM
(
SELECT
account_id,
month_id,
balance,
SUM(balance) OVER (
PARTITION BY account_id
ORDER BY month_id
ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING
) AS previous,
SUM(dynamic_part) OVER (
PARTITION BY account_id
ORDER BY month_id
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
) AS new_dynamic_part
FROM
(
SELECT
account_id,
month_id,
balance,
SUM(balance) OVER (
PARTITION BY account_id
ORDER BY month_id
ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING
) AS previous,
(CASE
WHEN balance <= previous
THEN 1
ELSE 0
END) AS dynamic_part
FROM
account_balance
)
)
ORDER BY 1, 2;
account_id | month_id | balance | previous | balance_increase |
---|---|---|---|---|
1 | 1 | 60 | 0 | |
1 | 2 | 99 | 60 | 1 |
1 | 3 | 94 | 99 | 0 |
1 | 4 | 90 | 94 | 0 |
1 | 5 | 80 | 90 | 0 |
1 | 6 | 88 | 80 | 1 |
1 | 7 | 90 | 88 | 2 |
1 | 8 | 92 | 90 | 3 |
1 | 9 | 10 | 92 | 0 |
1 | 10 | 60 | 10 | 1 |
1 | 11 | 80 | 60 | 2 |
1 | 12 | 10 | 80 | 0 |
Bekannte Probleme¶
Die Klausel RESET WHEN kann einige Variationen aufweisen, wie z. B. ihre Bedingung. Derzeit unterstützt SnowConvert nur binäre Bedingungen (<=, >=, <> oder =), in jedem anderen Typ, wie IS NOT NULL
, SnowConvert wird die Klausel RESET WHEN entfernt und eine Fehlermeldung hinzugefügt, da sie in Snowflake nicht unterstützt wird, wie im folgenden Beispiel gezeigt.
Teradata¶
SELECT
account_id,
month_id,
balance,
ROW_NUMBER() OVER (
PARTITION BY account_id
ORDER BY month_id
RESET WHEN balance IS NOT NULL
ROWS UNBOUNDED PRECEDING
) as balance_increase
FROM account_balance
ORDER BY 1,2;
Snowflake
SELECT
account_id,
month_id,
balance,
ROW_NUMBER() OVER (
PARTITION BY account_id
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0077 - RESET WHEN CLAUSE IS NOT SUPPORTED IN THIS SCENARIO DUE TO ITS CONDITION ***/!!!
ORDER BY month_id
ROWS UNBOUNDED PRECEDING
) as balance_increase
FROM
account_balance
ORDER BY 1,2;
Zugehörige EWIs¶
[SSC-EWI-TD0077](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/teradataEWI. md#ssc-ewi-td0077): RESET WHEN Klausel wird in diesem Szenario aufgrund ihrer Bedingung nicht unterstützt.
SAMPLE-Klausel.¶
Beschreibung¶
Die SAMPLE-Klausel in Teradata reduziert die Anzahl der zu verarbeitenden Zeilen und gibt ein oder mehrere Beispiele von Zeilen als Liste von Brüchen oder als Liste von Zeilenzahlen zurück. Die Klausel wird in der Abfrage SELECT verwendet. Bitte lesen Sie die folgende Teradata-Dokumentation für weitere Informationen.
Teradata-Syntax
SAMPLE
[ WITH REPLACEMENT ]
[ RANDOMIZED LOCALIZATION ]
{ { fraction_description | count_description } [,...] |
when_clause ]
}
Snowflake-Syntax
Weitere Informationen finden Sie in der folgenden Snowflake-Dokumentation. SAMPLE
und TABLESAMPLE
sind synonym.
SELECT ...
FROM ...
{ SAMPLE | TABLESAMPLE } [ samplingMethod ]
[ ... ]
Wobei:
samplingMethod ::= {
{ BERNOULLI | ROW } ( { <probability> | <num> ROWS } ) |
{ SYSTEM | BLOCK } ( <probability> ) [ { REPEATABLE | SEED } ( <seed> ) ] }
In Snowflake können die folgenden Schlüsselwörter austauschbar verwendet werden:
SAMPLE | TABLESAMPLE
BERNOULLI | ROW
SYSTEM | BLOCK
REPEATABLE | SEED
Sehen Sie sich die folgende Tabelle an, um die wichtigsten Unterschiede zu überprüfen.
SAMPLE-Verhalten |
Teradata |
Snowflake |
---|---|---|
Beispiel nach Wahrscheinlichkeit |
Auch bekannt als Bruchteilbeschreibung. Es muss eine Bruchzahl zwischen 0,1 und 1 sein. |
Dezimalzahl zwischen 0 und 100. |
Feste Anzahl von Zeilen |
Auch bekannt als Zählbeschreibung. Es handelt sich um eine positive ganze Zahl, die die Anzahl der zu erfassenden Zeilen bestimmt. |
Er gibt die Anzahl der Zeilen (bis zu 1.000.000) an, die aus der Tabelle entnommen werden sollen. Kann eine beliebige ganze Zahl zwischen |
Wiederholte Zeilen |
Bekannt als |
Bekannt als |
Stichprobenverfahren |
Proportional und |
|
Beispielhafte Quellcode-Muster¶
Beispieldaten¶
Teradata
CREATE TABLE Employee (
EmpNo INT,
Name VARCHAR(100),
DeptNo INT
);
INSERT INTO Employee (EmpNo, Name, DeptNo)
VALUES (1, 'Alice', 100);
INSERT INTO Employee (EmpNo, Name, DeptNo)
VALUES (2, 'Bob', 300);
INSERT INTO Employee (EmpNo, Name, DeptNo)
VALUES (3, 'Charlie', 500);
INSERT INTO Employee (EmpNo, Name, DeptNo)
VALUES (4, 'David', 200);
INSERT INTO Employee (EmpNo, Name, DeptNo)
VALUES (5, 'Eve', 100);
Snowflake
CREATE OR REPLACE TABLE Employee (
EmpNo INT,
Name VARCHAR(100),
DeptNo INT
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "teradata", "convertedOn": "01/14/2025", "domain": "test" }}'
;
INSERT INTO Employee (EmpNo, Name, DeptNo)
VALUES (1, 'Alice', 100);
INSERT INTO Employee (EmpNo, Name, DeptNo)
VALUES (2, 'Bob', 300);
INSERT INTO Employee (EmpNo, Name, DeptNo)
VALUES (3, 'Charlie', 500);
INSERT INTO Employee (EmpNo, Name, DeptNo)
VALUES (4, 'David', 200);
INSERT INTO Employee (EmpNo, Name, DeptNo)
VALUES (5, 'Eve', 100);
SAMPLE-Klausel.¶
Feste Anzahl von Zeilen
Beachten Sie, dass in diesem Beispiel die Anzahl der Zeilen eine feste Zahl ist, aber nicht unbedingt bei jedem Durchlauf das gleiche Ergebnis erzielt wird.
Teradata
SELECT * FROM Employee SAMPLE 2;
2 Zeilen.
Snowflake
SELECT * FROM Employee SAMPLE (2 ROWS);
2 Zeilen.
Zeilennummer basierend auf der Wahrscheinlichkeit
Diese Option gibt eine Vielzahl von Zeilen zurück, abhängig von der eingestellten Wahrscheinlichkeit.
Teradata
SELECT * FROM Employee SAMPLE 0.25;
25 % der Wahrscheinlichkeit für jede Zeile: 1 Ausgabezeile.
Snowflake
SELECT * FROM Employee SAMPLE (25);
25 % der Wahrscheinlichkeit für jede Zeile: 1 Ausgabezeile.
Bekannte Probleme¶
Feste Anzahl von Zeilen mit Ersetzung¶
Diese Option gibt eine feste Anzahl von Zeilen zurück und erlaubt die Wiederholung der Zeilen. In Snowflake ist es nicht möglich, mehr Beispiele als Zeilen in einer Tabelle anzufordern.
Teradata-Beispiel
SELECT * FROM Employee SAMPLE WITH REPLACEMENT 8;
EmpNo |
Name |
DeptNo |
---|---|---|
5 |
Eva |
100 |
5 |
Eva |
100 |
5 |
Eva |
100 |
4 |
David |
200 |
4 |
David |
200 |
3 |
Charlie |
500 |
1 |
Alice |
100 |
1 |
Alice |
100 |