Похоже, ваши данные в формате JSON со встроенной структурной регистрацией в поле data
. Пока данные хорошо сформированы в формате JSON с одним объектом на строку, вы сможете создавать таблицы JSON, а затем использовать функции для извлечения других фрагментов из поля data
. Вы можете создать представление, которое выполняет извлечение, чтобы вам не приходилось делать это в каждом запросе.
Я думаю что-то вроде этого:
CREATE EXTERNAL TABLE raw_log_entries (
data string,
header struct<recvtime: string, server: string, refid: string>
)
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
LOCATION 's3://some-bucket/and/path/';
CREATE VIEW log_entries AS
SELECT
header.recvtime,
header.server,
header.refid,
regexp_extract(data, 'query=(\S+)', 1) AS query,
regexp_extract(data, 'type=(\S+)', 1) AS type,
regexp_extract(data, 'score=(\S+)', 1) AS score,
-- and so on
FROM raw_log_entries
Вам придется поэкспериментировать с регулярными выражениями, так как у меня нет ваших данных, я не могу быть уверен, что они будут работать для всех случаев, но я надеюсь, что вы поняли.