Amazon Athena берет все файлы с направления, а не один файл - PullRequest
0 голосов
/ 04 июля 2018

Я пишу запрос для создания таблицы на Amazon Athena, которая получает данные из файлов в каталоге S3. Тем не менее, я хотел бы создать таблицу из одного файла вместо всех файлов в каталоге. enter image description here

Я получаю ошибку местоположения, если ввожу LOCATION 's3: //influx-cold-storage/2018/file1.csv'

1 Ответ

0 голосов
/ 04 июля 2018

Ключевое слово LOCATION docs описывает его использование следующим образом:

Athena читает все файлы в местоположении Amazon S3, которое вы указали в операторе CREATE TABLE, и не может игнорировать любые файлы, включенные в префикс. Когда вы создаете таблицы, включайте в путь Amazon S3 только те файлы, которые Athena должна прочитать. Используйте функции AWS Lambda для сканирования файлов в исходном местоположении, удаления любых пустых файлов и перемещения ненужных файлов в другое место.

И указывает, что использование точных путей к файлам и подстановочным знакам (таким как *) не допускается.

Вы должны будете поместить любой нужный вам файл в его собственную директорию.

Я написал быстрый bash-скрипт, который переместит все файлы в текущем каталоге в каталоги с тем же именем без расширения для хакерского обходного пути:

#!/bin/bash

echo "INFO - Moving all files in current directory to directory of same name."

for file in ./*; do
    [[ -d "$file" ]] && continue 
    fname=`basename $file`
    dname=${fname%.*}
    echo "INFO - Creating directory $dname"
    mkdir "$dname"
    [[ $? -eq 0 ]] && echo "INFO - $dname created" || echo "WARN - $fname directory already exists."
    echo "INFO - Moving $fname to ${dname}/${fname}"
    mv "$file" "${dname}/${fname}"
    [[ $? -eq 0 ]] && echo "INFO - $fname moved successfully." || echo "WARN - Possibly failed. Checkfor $fname in $dname directory."
done
...