Афина - возьмите последний файл в ведре - PullRequest
0 голосов
/ 19 февраля 2019

Я новичок в Афинах и S3 в целом.Мы настроили Athena для доступа к сегментам S3, прикрепленным к базам данных, каждая из которых содержит одну и ту же таблицу в день данных.Например:

database-name - "sales"
tables: ["19.02.2019", "18.02.2019",..."01.02.2019"]

Для запроса таблицы мне нужно выполнить в качестве примера следующее:

SELECT 
a.creation_date,
a.number,
pa.customer_number,
a.customer_type,
a.name,
a.city,
a.country,
a.type,
a.business,
b.industry,
cu.group,
cu.closing_date,
cu.interest_flag,
FROM 
    (SELECT a.creation_date,
     a.type,
     a.number,
     a.customer_type,
     a.business,
     a.id,
     b.industry,
     customer.id,
     concat (p.first_name, ' ' ,p.last_name) AS name, p.address, p.country
    FROM "accounts"."2019_02_19_01_32_18" AS a
    LEFT JOIN "customers"."2019_02_19_02_31_03" AS c
        ON a.id=c.id
    LEFT JOIN "people"."2019_02_19_06_05_10" AS p
        ON c.person_id=p.id
    LEFT JOIN "strategic_partners"."2019_02_18_05_57_59" AS par
        ON par.uid=p.strapartner_uid
    WHERE a.number is NOT null  and a.customer_type = (1)

    UNION

    SELECT a.creation_date,
    a.type,
    a.number,
    a.customer_type,
    a.business_name,
    a.id,
    b.industry,
    customer.id,
    concat (p.first_name, ' ',p.last_name) AS name, p.address, p.country
    FROM "accounts"."2019_02_19_01_32_18" AS a
    LEFT JOIN "customers"."2019_02_19_02_31_03" AS c
        ON a.id=c.id
    LEFT JOIN "people"."2019_02_19_06_05_10" AS p
        ON c.person_id=p.id
    LEFT JOIN "strategic_partners"."2019_02_18_05_57_59" AS par
        ON par.uid=p.strapartner_uid
    WHERE a.number is NOT null and a.customer_type IN (4,8)
    ) AS a

    LEFT JOIN "progressive_accounts"."2019_02_18_18_15_28" AS pa
     ON pa.credit_number = a.credit_number
    LEFT JOIN "progressive_customer"."2019_02_18_18_15_01" AS cu
     ON pa.prog_number=cu.prog_number
     WHERE a.creation_date>='2018-10-01' AND a.creation_date<='2018-12-31'
     ORDER BY a.creation_date desc, a.business_name asc

Я пытаюсь выяснить, существует ли способ динамического запросапоследний доступный стол?Можно ли использовать функцию в запросе или какое-то альтернативное решение?

Последующий вопрос заключается в том, почему я не могу использовать CREATE VIEW для этого запроса.Я получаю сообщение об ошибке: Ваш запрос содержит следующие ошибки:

Access denied when writing to location: s3://dp-jupyterlabXXXXXXXXXXXXXX/notebooks/<username>/athena/Unsaved/2019/02/25/<unique reference id>.txt

This query ran against the "database name" database, unless qualified by the query. Please post the error message on our forum or contact customer support with Query Id: xxxxxx-xxxx-xxxxx-xxxx-xxxxxxxxxxx.

Когда я выполняю инструкцию SELECT, запрос выполняется успешно, и результаты генерируются, как и ожидалось.

Я не могу понятьпочему возвращается ошибка - пытаясь проверить, является ли это проблемой с правами доступа, я добавил в свою роль следующие политики:

- glue access to the bucket

- all glue policies to the user

Я также не могу понять, почему Афина пытается создатьПРОСМОТРЕТЬ базу данных, которая выбрана в раскрывающемся меню Athena справа, а не в «общедоступной» базе данных (например, в PostgreSQL или аналогичной).

Любое руководство будет отличным!

1 Ответ

0 голосов
/ 20 февраля 2019

Вы не можете использовать подзапрос, чтобы вернуть имя таблицы для использования в запросе.

Вместо этого вы можете использовать CREATE OR REPLACE VIEW каждый день, чтобы сделать точку обзора «последней» таблицы.Затем просто запросите представление.

Возможно, у вас есть какая-то ежедневная задача, которая создает каждую из этих таблиц, поэтому она также должна обновить представление.

...