Perché non ottengo alcun record quando eseguo una query della mia tabella Amazon Athena?
Ho eseguito un'istruzione CREATE TABLE in Amazon Athena con le colonne previste e i relativi tipi di dati. Quando eseguo la query SELECT * FROM table-name, l'output è "Zero record restituiti."
Risoluzione
Di seguito sono riportati alcuni motivi comuni per cui la query potrebbe restituire zero record. In base al tuo caso d'uso, consulta la sezione correlata per i motivi più comuni e le procedure di risoluzione dei problemi.
Partizioni AWS Glue
File selezionato nelle impostazioni del crawler
Se utilizzi un crawler, verifica che il crawler punti al bucket Amazon Simple Storage Service (Amazon S3) anziché a un file. Inoltre, assicurati che il percorso del bucket S3 non includa una barra finale. Ad esempio, usa s3://doc-example-bucket/new invece di s3://doc-example-bucket/new/data.json.
Percorso LOCATION non corretto
Verifica il percorso LOCATION di Amazon S3 per i dati di input. Se il percorso LOCATION di input non è corretto, Athena restituisce zero record. Assicurati che il percorso del bucket S3 non includa un file, una barra finale o un carattere jolly. Ad esempio, usa s3://doc-example-bucket/new invece di s3://doc-example-bucket/new/data.json.
Doppia barra nel percorso LOCATION
Athena non supporta i percorsi di posizione delle tabelle che includono una doppia barra (//). Ad esempio, il seguente percorso LOCATION restituisce risultati vuoti: s3://doc-example-bucket/myprefix//input//
Per risolvere questo problema, copia i file in una posizione priva di doppie barre. Di seguito è riportato un comando dell’interfaccia della linea di comando (AWS CLI) per copiare i file:
aws s3 cp s3://doc-example-bucket/myprefix//input// s3://doc-example-bucket/myprefix/input/ --recursive
Nota: se visualizzi dei messaggi di errore quando esegui i comandi dell'interfaccia della linea di comando AWS, consulta la sezione Risolvere gli errori AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.
**Caratteri speciali **
È consigliabile includere solo caratteri di sottolineatura o lettere maiuscole nei nomi delle colonne della tabella. Ad esempio, puoi denominare una colonna table_name, ma non table-name.
Nota: AWS Glue e Athena non possono leggere lettere maiuscole, maiuscole o caratteri speciali diversi dal carattere di sottolineatura.
Dati per più tabelle memorizzate nello stesso prefisso S3
I crawler AWS Glue creano tabelle separate per i dati memorizzati nello stesso prefisso S3. Tuttavia, quando si esegue una query su tali tabelle in Athena, non si ottengono record. Ad esempio, la query Athena restituisce zero record se la posizione della tabella è simile alla seguente:
- s3://doc-example-bucket/table1.csv
- s3://doc-example-bucket/table2.csv
Per risolvere questo problema, crea prefissi S3 singoli per ogni tabella simili ai seguenti:
- s3://doc-example-bucket/table1/table1.csv
- s3://doc-example-bucket/table2/table2.csv
Quindi, esegui una query simile alla seguente per aggiornare la posizione della tua tabella table1:
ALTER TABLE table1 SET LOCATION 's3://doc-example-bucket/table1';
Partizioni non ancora caricate
Athena crea metadati solo quando viene creata una tabella. I dati vengono analizzati solo quando si esegue la query. Se la tabella ha delle partizioni definite, è possibile che le partizioni non siano ancora state caricate nel Catalogo dati AWS Glue o nel catalogo dati interno di Athena. Utilizza MSCK REPAIR TABLE o ALTER TABLE ADD PARTITION per caricare le informazioni sulla partizione nel catalogo.
Se le partizioni sono archiviate in un formato supportato da Athena, esegui MSCK REPAIR TABLE per caricare i metadati di una partizione nel catalogo. Ad esempio, se disponi di una tabella partizionata in base all’anno, Athena si aspetta di trovare dati nei percorsi Amazon S3 simili ai seguenti esempi:
- s3://doc-example-bucket/athena/inputdata/year=2020/data.csv
- s3://doc-example-bucket/athena/inputdata/year=2019/data.csv
- s3://doc-example-bucket/athena/inputdata/year=2018/data.csv
Se i dati si trovano nei percorsi di Amazon S3 previsti da Athena, esegui un comando simile a questo esempio per riparare la tabella:
CREATE EXTERNAL TABLE Employee ( Id INT, Name STRING, Address STRING ) PARTITIONED BY (year INT) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION 's3://doc-example-bucket/athena/inputdata/';
Dopo aver creato la tabella, carica le informazioni sulla partizione:
MSCK REPAIR TABLE Employee;
Dopo il caricamento dei dati, esegui nuovamente la seguente query:
SELECT * FROM Employee;
Se le partizioni non sono archiviate in un formato supportato da Athena o si trovano in percorsi Amazon S3 diversi, esegui ALTER TABLE ADD PARTITION per ciascuna partizione.
Ad esempio, supponiamo che i dati si trovino nei seguenti percorsi Amazon S3:
- s3://doc-example-bucket/athena/inputdata/2020/data.csv
- s3://doc-example-bucket/athena/inputdata/2019/data.csv
- s3://doc-example-bucket/athena/inputdata/2018/data.csv
Con questi percorsi, esegui un comando simile a questo esempio:
ALTER TABLE Employee ADD PARTITION (year=2020) LOCATION 's3://doc-example-bucket/athena/inputdata/2020/' PARTITION (year=2019) LOCATION 's3://doc-example-bucket/athena/inputdata/2019/' PARTITION (year=2018) LOCATION 's3://doc-example-bucket/athena/inputdata/2018/'
Dopo il caricamento dei dati, esegui nuovamente la seguente query:
SELECT * FROM Employee;
File nascosti di Hive
Verifica che i nomi dei file non inizino con un carattere di sottolineatura (_) o un punto (.).
Athena considera questi file come segnaposto e li ignora durante l’elaborazione di una query. Per ulteriori informazioni, consulta Athena can't read hidden files. Se tutti i file nel tuo percorso S3 hanno nomi che iniziano con un carattere di sottolineatura o un punto, ottieni zero record.
Nota: se il percorso S3 include segnaposti insieme a file i cui nomi iniziano con caratteri diversi, Athena ignora solo i segnaposti e interroga gli altri file. Pertanto, potresti ottenere uno o più record.
Ad esempio:
- s3://doc-example-bucket/athena/inputdata/_file1
- s3://doc-example-bucket/athena/inputdata/.file2
Proiezione delle partizioni
Valori che non rientrano nei limiti dell'intervallo per la proiezione delle partizioni
Le interrogazioni per valori che superano i limiti dell'intervallo definiti per la proiezione delle partizioni non restituiscono un errore. La query restituisce invece zero righe.
Ad esempio, supponiamo che i tuoi dati inizino nel 2020 e siano definiti come: projection.timestamp.range'='2020/01/01, NOW
Se esegui questa query di esempio, la query viene completata correttamente, ma restituisce zero righe:
SELECT * FROM table-name WHERE timestamp = '2019/02/02'
Il modello di archiviazione non segue lo schema di partizionamento predefinito
Se le posizioni dei file Amazon S3 non seguono lo scheda di posizione .../column=value..., è necessario specificare uno schema di partizionamento Amazon S3 personalizzato. Se non si definisce uno schema personalizzato, la query restituisce zero record.
Se si utilizza un modello personalizzato, il modello deve contenere un segnaposto per ogni colonna della partizione. Per informazioni sulla definizione di uno schema di partizionamento S3 personalizzato, consulta Specifying custom S3 storage locations.
**Modello di archiviazione personalizzato errato **
Se utilizzi un modello personalizzato, assicurati che il modello consenta ad Athena di creare le posizioni delle partizioni. Inoltre, assicurati che ogni segnaposto e il percorso Amazon S3 terminino con una singola barra.
Ad esempio, supponiamo di definire l'anno di una colonna di partizione con l'istruzione DDL PARTITIONED BY (stringa dell'anno) e che le posizioni dei file S3 siano **s3://doc-example-bucket/athena/inputdata/Year=2022/.**Questa posizione restituisce zero record. Aggiorna la posizione di storage di Amazon S3 in: s3://doc-example-bucket/athena/inputdata/Year=${year}.
Proprietà delle partizioni
Se disponi di un tipo enum, integer o data delle colonne di partizione, assicurati di impostare correttamente le proprietà della partizione. Le configurazioni devono consentire ad Athena di creare posizioni di partizione che corrispondano alla struttura dei dati su Amazon S3.
Ad esempio, supponiamo di avere dati relativi all'ora che arrivano ogni giorno un'ora dopo mezzanotte nella posizione: s3://doc-example-bucket/athena/inputdata/2022-01-01-01-00.
In questo esempio, la tabella Athena utilizza le seguenti proprietà di partizione:
'projection.dt.format' = 'yyyy-MM-dd-HH-mm','projection.dt.range' = '2022-01-01-00-00,NOW', 'projection.dt.interval' = '1', 'projection.dt.interval.unit' = 'DAYS'
Le query eseguite sulla tabella di esempio restituiscono zero record. Questo perché le posizioni dei file della proprietà proiettate corrispondono alla mezzanotte s3://doc-example-bucket/athena/inputdata/2022-01-01-00-00.
Per risolvere questo problema, imposta la proprietà 'projection.dt.range’ su '2022-01-01-01-00, NOW'.
Informazioni correlate
Video correlati


Contenuto pertinente
- AWS UFFICIALEAggiornata 3 anni fa
- AWS UFFICIALEAggiornata 3 anni fa
- AWS UFFICIALEAggiornata un anno fa