2016-08-05 11 views
0

können wir die Anzahl der Zeile durch Kopierbefehl eingefügt bekommen? Einige Datensätze können fehlschlagen, und welche Anzahl von Datensätzen wurde erfolgreich eingefügt?RedShift-Kopie Befehl zurückgeben

Ich habe eine Datei mit Json-Objekt in Amazon S3 und versuchen, Daten in Redshift mit Kopierbefehl zu laden. Woher weiß ich, wie viele Datensätze erfolgreich eingefügt wurden und wie viele fehlgeschlagen sind?

Antwort

0

Laden einige Beispieldaten:

db=# copy test from 's3://bucket/data' credentials '' maxerror 5; 
INFO: Load into table 'test' completed, 4 record(s) loaded successfully. 
COPY 

db=# copy test from 's3://bucket/err_data' credentials '' maxerror 5; 
INFO: Load into table 'test' completed, 1 record(s) loaded successfully. 
INFO: Load into table 'test' completed, 2 record(s) could not be loaded. Check 'stl_load_errors' system table for details. 
COPY 

Dann wird die folgende Abfrage:

with _successful_loads as (
    select 
     stl_load_commits.query 
     , listagg(trim(filename), ', ') within group(order by trim(filename)) as filenames 
    from stl_load_commits 
    left join stl_query using(query) 
    left join stl_utilitytext using(xid) 
    where rtrim("text") = 'COMMIT' 
    group by query 
), 
_unsuccessful_loads as (
    select 
     query 
     , count(1) as errors 
    from stl_load_errors 
    group by query 
) 
select 
    query 
    , filenames 
    , sum(stl_insert.rows)   as rows_loaded 
    , max(_unsuccessful_loads.errors) as rows_not_loaded 
from stl_insert 
inner join _successful_loads using(query) 
left join _unsuccessful_loads using(query) 
group by query, filenames 
order by query, filenames 
; 

Giving:

query |     filenames     | rows_loaded | rows_not_loaded 
-------+------------------------------------------------+-------------+----------------- 
45597 | s3://bucket/err_data.json      |   1 |    2 
45611 | s3://bucket/data1.json, s3://bucket/data2.json |   4 | 
(2 rows)