Temat: wyszukanie pola(kolumny)
Tak jak pisał Karol, można to zrobić 'brute force', wykorzystując mechanizm samplingu oraz procedury składowane:
CREATE PROCEDURE DB_TMP.SZUKAJ ()
SQL SECURITY INVOKER
BEGIN
DECLARE stmt VARCHAR(500);
FOR dbc_columns AS cur1 CURSOR FOR
SELECT DatabaseName, TableName, ColumnName
FROM DBC.Columns
WHERE DatabaseName = 'NAZWA_BAZY'
DO
SET stmt = 'INSERT INTO DB_TMP.ZNALEZIONE ' || 'SELECT ''' || TRIM(dbc_columns.DatabaseName) ||''',''' || TRIM(dbc_columns.TableName) || ''',''' || TRIM(dbc_columns.ColumnName) ||''', ' || TRIM(dbc_columns.ColumnName) || ' FROM ' || TRIM(dbc_columns.DatabaseName) || '.' || TRIM(dbc_columns.TableName) || ' SAMPLE 5';
CALL DBC.SYSEXECSQL(stmt);
END FOR;
END;
Teradata kiepsko radzi sobie z małymi porcjami danych, ale dzięki funkcji SAMPLE jest możliwość zwrócenia niewielkiej ilości rekordów w krótkim czasie. Im większa wartość SAMPLE, tym większe prawdopodobieństwo że znajdziesz to czego szukasz.
Do tego potrzebujesz prostej tabeli na wyniki:
CREATE MULTISET TABLE DB_TMP.ZNALEZIONE, NO FALLBACK, NO BEFORE JOURNAL, NO AFTER JOURNAL, CHECKSUM = DEFAULT
(
DatabaseName CHAR(32),
TableName CHAR(32),
ColumnName CHAR(32),
ColumnValue CHAR(500) CHARACTER SET UNICODE CASESPECIFIC
);
Po uruchomieniu procedury: CALL DB_TMP.SZUKAJ(); w kolumnie ColumnValue znajdziesz próbki wartości dla poszczególnych kolumn:
SELECT *
FROM DB_TMP.ZNALEZIONE
WHERE ColumnValue LIKE 'C%';
Co do excela, nic do niego nie mam, bardzo dobre narzędzie, ale w tym przypadku prościej wykorzystać mechanizmy które dostarcza baza.
Łukasz Schabek edytował(a) ten post dnia 29.08.12 o godzinie 12:47