Ich versuche, eine Stichprobe von Daten aus jeder Spalte in jeder Tabelle in etwa 5 Schemas zu greifen. Unten ist ein Beispiel, wie ich diese Daten von nur einem Schema bekomme (ersetze "sde" mit was auch immer dein Schema ausführen soll). Dieses Stück läuft gut:Oracle/SQL Beispiel von Daten aus jeder Spalte aus jeder Tabelle - zu viel?
select CASE when
lead(ROWNUM) over(order by ROWNUM) is null then
'select '||''''||T.TABLE_NAME||''''||' as TABLE_NAME,'||''''||T.COLUMN_NAME||''''||' as COLUMN_NAME, cast('|| T.COLUMN_NAME ||' as
VarChar2(50)) as SAMPLE_DATA from sde.'||T.TABLE_NAME ||' where '||T.COLUMN_NAME||' is not null and ROWNUM=1;'
else
'select '||''''||T.TABLE_NAME||''''||' as TABLE_NAME,'||''''||T.COLUMN_NAME||''''||' as COLUMN_NAME, cast('|| T.COLUMN_NAME ||' as
VarChar2(50)) as SAMPLE_DATA from sde.'||T.TABLE_NAME ||' where '||T.COLUMN_NAME||' is not null and ROWNUM=1 union all' end as qry_txt
from all_tab_columns t where T.OWNER='SDE' and T.DATA_TYPE != 'BLOB' and T.DATA_TYPE != 'LONG'
ORDER BY ROWNUM asc, qry_txt asc
Wenn die oben ausgeführt wird resultierende, hier ist ein Beispiel für 1 Zeile der Ausgabe:
select 'HUD_TYPE' as TABLE_NAME,'HUD_TYPE_ID' as COLUMN_NAME, cast(HUD_TYPE_ID as VarChar2(50)) as SAMPLE_DATA from sde.HUD_TYPE where HUD_TYPE_ID is not null and ROWNUM=1 union all
Das Problem, das ich mit Blick auf bin, ist, dass, wenn ich laufe die komplette Reihe von Gewerkschaften, es wird nie abgeschlossen, habe ich nur in der Lage gewesen, mit zu einer Zeit, ein paar hundert bis ein paar tausend Zeilen laufen: mit nur 5.000 Zeilen
select CASE when
lead(ROWNUM) over(order by ROWNUM) is null then
'select '||''''||T.TABLE_NAME||''''||' as TABLE_NAME,'||''''||T.COLUMN_NAME||''''||' as COLUMN_NAME, cast('|| T.COLUMN_NAME ||' as
VarChar2(50)) as SAMPLE_DATA from sde.'||T.TABLE_NAME ||' where '||T.COLUMN_NAME||' is not null and ROWNUM=1;'
else
'select '||''''||T.TABLE_NAME||''''||' as TABLE_NAME,'||''''||T.COLUMN_NAME||''''||' as COLUMN_NAME, cast('|| T.COLUMN_NAME ||' as
VarChar2(50)) as SAMPLE_DATA from sde.'||T.TABLE_NAME ||' where '||T.COLUMN_NAME||' is not null and ROWNUM=1 union all' end as qry_txt
from all_tab_columns t where T.OWNER='SDE' and T.DATA_TYPE != 'BLOB' and T.DATA_TYPE != 'LONG'
ORDER BY ROWNUM asc, qry_txt asc
OFFSET 4800 ROWS FETCH NEXT 400 ROWS ONLY; --Using this method so I grab the last few hundred lines so my case statement remains valid for demo
Dieses besondere Schema ist die kleinste im Bund zurückgeben. Ist das, was ich versuche, eine unmögliche Aufgabe für eine On-The-Fly-Abfrage zu tun? Oder gibt es einen Weg, wie ich das effizienter machen oder in Schleifen aufteilen kann, um auf irgendeine Weise Stücke zu packen? Versuche zu vermeiden, dass wir unsere Entwickler involvieren müssen und Tabellen erstellen, ETLs usw. Ich bin kein SQL-Experte, aber wenn ich in die richtige Richtung gewiesen werde, kann ich es aushacken. :)
Vielen Dank im Voraus.
Was ist das eigentliche Problem, das Sie versuchen zu lösen? Vielleicht ist das Sampling von Daten aus jeder Spalte in jeder Tabelle in fünf Schemas nicht die einzige Lösung für Ihr tatsächliches Problem (und vielleicht ist es nicht einmal die beste Lösung). – mathguy
Sicher. Ich habe einen Tableau-Bericht für Kunden erstellt, der eine schnelle Möglichkeit bietet, unsere verfügbaren Tabellen und Spalten zu durchsuchen. Sie enthält Spalten wie Schema, Objekttyp (Tabelle, Ansicht usw.), Tabellenname, Spaltenname, Datentyp und Kommentare. Ich wollte auch "Sample Data" als eine Spalte, die eine einzelne Zeile von Daten aus jeder Spalte in jeder Tabelle ist. Ich weiß, wie es geht, aber die Union-Set scheint mit jeder normalen Größe Datensatz hängen ... Hoffnung für einige Optimierung Zeiger oder alternative Methoden, um das gleiche zu erreichen. – Drivium