AWS Glue - Как настроить Crawler для создания таблицы с именами файлов S3 внутри

изменить

 return inflater.inflate(R.layout.input_fgmt, container, false);

на

 return InputFragmentView ;

Также измените с помощью этого:

translate_button.setOnClickListener(new View.OnClickListener()
{
    @Override
    public void onClick(View view)
    {
        Log.d("Test", "onClickListener ist gestartet");
        Toast.makeText(getActivity().getApplicationContext(), "Test", Toast.LENGTH_LONG).show();
        saveInString();

    }
});

и импортируйте в качестве импорта android.view.View ;

0
задан Vladimir Lopez Salvador 5 March 2019 в 21:01
поделиться

1 ответ

1110] Есть способ сделать это с Афиной, но я не могу рекомендовать это. Я включил это ниже.

В зависимости от вашего приложения есть разные способы сделать это. Если файлы меняются не часто и вы не возражаете возвращать результаты, которым несколько часов, я бы предложил использовать S3 Inventory , он периодически записывает список всех объектов в корзине. Для поиска файла вы ищите последний манифест инвентаря, находите списки инвентаря и просматриваете их (вы даже можете использовать Athena для запроса инвентаря, для этого есть руководство в документации ).

Если вам нужно быть более свежим, S3 Inventory не будет работать, поскольку он будет создавать новый листинг не чаще одного раза в день.

Если это так, вы можете просто перечислить все файлы в вашем корзине для каждого поиска, в зависимости от количества файлов, о которых мы говорим, это может быть очень медленным или очень быстрым - будет менее 1000 файлов. очень быстро, но после этого вам нужно будет выполнить несколько запросов на страницы 1000 объектов за раз, или придумать, как выполнить несколько параллельных операций подкачки, перечислив все объекты, начиная с a, в один все операции начинаются с b в другом и т. д.

Наиболее экономически эффективное решение, если вы хотите быть в курсе событий и иметь быстрые ответы, - это хранить отдельный индекс объектов в вашей корзине. Обновите индекс, прослушивая S3 Event Notifications . Прослушайте как создания, так и удаления, и обновите индекс соответствующим образом. Вы можете использовать ElasticSearch, Algolia или Postgres или любой другой сервис или базу данных с приличными полнотекстовыми возможностями для индекса - но это будет намного больше инфраструктуры для настройки, чем просто S3, конечно.


Если вы абсолютно хотите сделать это с Athena, это может быть сделано, но это не будет самым эффективным решением, и если у вас много файлов, и они содержат много данных, это может закончиться немного дороже, так что будьте осторожны.

Во всех таблицах Athena есть скрытый столбец с именем $path, который содержит полный URI объекта S3, из которого была прочитана строка. Его также можно использовать для фильтрации.

Если вы создадите таблицу следующим образом:

CREATE EXTERNAL TABLE `listing` (`ignored` string)
STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 's3://bucket_name/'
TBLPROPERTIES ('has_encrypted_data'='false')

это просто таблица с фиктивным столбцом, она может быть названа как угодно, она просто есть, потому что невозможно создать таблицу без столбцов. Просто убедитесь, что LOCATION правильно.

Для поиска объектов это то, что вы делаете:

SELECT DISTINCT "$path"
FROM listing
WHERE "$path" LIKE '%foo%'

Хотя это может выглядеть аккуратно и решить вашу проблему, это ужасно неэффективный и дорогой способ сделать это. Афина перечислит все файлы в вашем ведре, затем прочитает их все, и вам придется заплатить как за операции S3, так и за отсканированные данные. Даже если Афина в конце концов только смотрит на клавиши S3, у нее нет никакой оптимизации, которая мешает ей читать их все.

0
ответ дан Theo 5 March 2019 в 21:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: