Risoluzione dei problemi relativi alle query in Amazon Redshift Spectrum - Amazon Redshift

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Risoluzione dei problemi relativi alle query in Amazon Redshift Spectrum

Di seguito, è possibile trovare un riferimento rapido che identifica e risolve alcuni problemi comuni che si possono incontrare con le query di Amazon Redshift Spectrum. Per visualizzare gli errori generati dalle query di Redshift Spectrum, eseguire una query sulla tabella di sistema SVL_S3LOG.

Superamento del numero di nuovi tentativi

In caso di timeout di una richiesta di Amazon Redshift Spectrum, la richiesta viene annullata e inoltrata di nuovo. Dopo cinque tentativi non riusciti, la query non riesce con il seguente errore.

error:  Spectrum Scan Error: Retries exceeded

Le cause possibili sono:

  • File di grandi dimensioni (superiori a 1 GB). Verificare la dimensione dei file in Amazon S3 e cercare file di dimensioni voluminose e disuguali. Dividi i file di grandi dimensioni in file più piccoli, di dimensione tra 100 MB e 1 GB. Fai in modo che i file siano della stessa dimensione.

  • Throughput di rete lento. Riesegui la query in seguito.

Accesso limitato

Amazon Redshift Spectrum è soggetto alle quote di servizio di AWS altri servizi. In caso di utilizzo elevato, le richieste Redshift Spectrum potrebbero rallentare, causando il seguente errore.

error:  Spectrum Scan Error: Access throttled

Possono verificarsi due tipi di limitazione:

  • Accesso limitato da Amazon S3

  • Accesso limitato da. AWS KMS

Il contesto di errore fornisce ulteriori dettagli sul tipo di limitazione. Di seguito, puoi trovare le cause e le possibili risoluzioni per questa limitazione.

Accesso limitato da Amazon S3

Amazon S3 potrebbe limitare una richiesta Redshift Spectrum se la frequenza di richieste di lettura su un prefisso è troppo alta. Per informazioni sulla frequenza di richieste GET/HEAD che si può ottenere in Amazon S3, consultare Ottimizzazione delle prestazioni di Amazon S3 nella Guida per l'utente di Amazon Simple Storage Service. La frequenza di richieste GET/HEAD di Amazon S3 tiene conto di tutte le richieste GET/HEAD su un prefisso, quindi diverse applicazioni che accedono allo stesso prefisso condividono la frequenza totale delle richieste.

Se le richieste di Redshift Spectrum vengono spesso limitate da Amazon S3, che riduce il numero di richieste GET/HEAD di Amazon S3 che Redshift Spectrum effettua ad Amazon S3. A tale scopo, prova a unire file di piccole dimensioni in file più grandi. Ti consigliamo di utilizzare dimensioni pari a 64 MB o superiori.

Considerare inoltre la possibilità di partizionare le tabelle Redshift Spectrum per beneficiare del filtraggio anticipato e ridurre il numero di file a cui si accede in Amazon S3. Per ulteriori informazioni, consultare Partizionamento delle tabelle esterne di Redshift Spectrum.

Accesso limitato da AWS KMS

Se memorizzi i dati in Amazon S3 utilizzando la crittografia lato server (SSE-S3 o SSE-KMS), Amazon S3 richiama un'operazione API per ogni file a cui accede Redshift Spectrum. AWS KMS Queste richieste vengono conteggiate per la quota delle operazioni di crittografia; per ulteriori informazioni, consultare Quote di richiesta AWS KMS. Per ulteriori informazioni su SSE-S3 e SSE-KMS, consultare Protezione dei dati tramite crittografia lato server e Protezione dei dati tramite crittografia lato server con Chiavi KMS archiviate in AWS KMS nella Guida per l'utente di Amazon Simple Storage Service.

Un primo passo per ridurre il numero di richieste inviate da Redshift Spectrum AWS KMS consiste nel ridurre il numero di file a cui si accede. A tale scopo, prova a unire file di piccole dimensioni in file più grandi. Ti consigliamo di utilizzare dimensioni pari a 64 MB o superiori.

Se le tue richieste Redshift Spectrum vengono spesso limitate AWS KMS, prendi in considerazione la possibilità di richiedere un aumento della quota per la frequenza di AWS KMS richieste per le operazioni crittografiche. Per richiedere un aumento della quota, consulta Limiti del servizio AWS in Riferimenti generali di Amazon Web Services.

Superamento del limite di risorse

Redshift Spectrum applica un limite superiore sulla quantità di memoria che una richiesta può utilizzare. Una richiesta Redshift Spectrum che richiede più memoria non riesce, causando il seguente errore.

error:  Spectrum Scan Error: Resource limit exceeded

Esistono due motivi comuni che possono causare il superamento dei limiti di memoria di una richiesta Redshift Spectrum:

  • Redshift Spectrum elabora una grande porzione di dati che non possono essere suddivisi in blocchi più piccoli.

  • Un passaggio di aggregazione di grandi dimensioni viene elaborato da Redshift Spectrum.

Ti consigliamo di utilizzare un formato di file che supporti le letture parallele con dimensioni di divisione pari o inferiori a 128 MB. consultare Creazione di file di dati per le query in Amazon Redshift Spectrum per i formati di file supportati e le linee guida generiche per la creazione di file di dati. Quando utilizzi formati di file o algoritmi di compressione che non supportano le letture parallele, ti consigliamo di mantenere le dimensioni dei file tra 64 MB e 128 MB.

Nessuna riga restituita per una tabella partizionata

Se la query restituisce zero righe da una tabella esterna partizionata, verifica se una partizione è stata aggiunta per questa tabella esterna. Redshift Spectrum esegue la scansione dei file in una posizione Amazon S3 che è stata esplicitamente aggiunta utilizzando ALTER TABLE … ADD PARTITION. Esegui la query sulla vista SVV_EXTERNAL_PARTITIONS per trovare le partizioni esistenti. Esegui ALTER TABLE … ADD PARTITION per ogni partizione mancante.

Errore non autorizzato

Verificare che il ruolo IAM per il cluster consenta l'accesso agli oggetti dei file Amazon S3. Se il database esterno si trova in Amazon Athena, verificare che il ruolo IAM consenta l'accesso alle risorse Athena. Per ulteriori informazioni, consultare Policy IAM per Amazon Redshift Spectrum.

Formati di dati non compatibili

Per un formato di file a colonne, come Apache Parquet, il tipo di colonna è incorporato ai dati. Il tipo di colonna nella definizione CREATE EXTERNAL TABLE deve corrispondere al tipo di colonna del file di dati. In caso di mancata corrispondenza, viene visualizzato un messaggio di errore simile al seguente:

File 'https://s3bucket/location/file has an incompatible Parquet schema for column ‘s3://s3bucket/location.col1'. Column type: VARCHAR, Par

Il messaggio potrebbe essere troncato a causa del limite della lunghezza del messaggio. Per recuperare il messaggio completo, incluso il nome e il tipo di colonna, eseguire una query sulla vista di sistema SVL_S3LOG.

Le seguenti query di esempio SVL_S3LOG per l'ultima query completata.

select message from svl_s3log where query = pg_last_query_id() order by query,segment,slice;

Quanto segue è un esempio di risultato che mostra un messaggio di errore completo.

                            message
–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-
Spectrum Scan Error. File 'https://s3bucket/location/file has an incompatible
Parquet schema for column ' s3bucket/location.col1'. 
Column type: VARCHAR, Parquet schema:\noptional int64 l_orderkey [i:0 d:1 r:0]\n

Per correggere l'errore, modifica la tabella esterna affinché corrisponda al tipo di colonna del file Parquet.

Errore di sintassi durante l'utilizzo della DDL Hive in Amazon Redshift

Per CREATE EXTERNAL TABLE, Amazon Redshift supporta un linguaggio DDL che è simile al linguaggio DDL Hive. Tuttavia, i due tipi di DDL non sono sempre esattamente gli stessi. Se si copia il DDL Hive per creare o modificare le tabelle esterne Amazon Redshift, è possibile che si verifichino errori di sintassi. Di seguito sono riportati alcuni esempi di differenze tra Amazon Redshift e la DDL Hive:

  • Amazon Redshift richiede l'utilizzo di virgolette singole (') mentre la DDL Hive supporta le virgolette doppie (").

  • Amazon Redshift non supporta il tipo di dati STRING. Utilizza invece VARCHAR.

Autorizzazione per creare tabelle temporanee

Per eseguire le query di Redshift Spectrum, l'utente del database deve disporre dell'autorizzazione per creare tabelle temporanee nel database. L'esempio seguente concede l'autorizzazione temporanea per il database spectrumdb al gruppo di utenti spectrumusers.

grant temp on database spectrumdb to group spectrumusers;

Per ulteriori informazioni, consultare GRANT.

Intervallo non valido

Redshift Spectrum prevede che i file in Amazon S3 appartenenti a una tabella esterna non vengano sovrascritti durante una query. In tal caso, può restituire il seguente errore.

Error: HTTP response error code: 416 Message: InvalidRange The requested range is not satisfiable

Per evitare l'errore, assicurati che i file Amazon S3 non vengano sovrascritti mentre sono soggetti a query con Redshift Spectrum.

Numero versione di Parquet non valido

Redshift Spectrum controlla i metadati di ogni file Apache Parquet a cui accede. Se il controllo ha esito negativo, può essere visualizzato un errore simile al seguente:

File 'https://s3.region.amazonaws.com/s3bucket/location/file has an invalid version number

L'esito negativo del controllo può essere causato da due motivi comuni:

  • Il file Parquet è stato sovrascritto durante la query (consulta Intervallo non valido ).

  • Il file Parquet è danneggiato.