Ведение исторической таблицы с обновлениями из новых данных на userID-SQL - PullRequest
0 голосов
/ 18 декабря 2018

Учитывая, что у меня есть таблица с историческими данными (за 2 года), которая была создана после выполнения следующего запроса в spark:

temp_result = spark.sql("SELECT gaid,MIN(CASE WHEN upper(event) in ('APP 
ACCESS', 'APP OPENED', 'APP LAUNCHED') THEN date_stamp_ist END) as 
first_app_access_date,MIN(CASE WHEN upper(event) in ('MEDIAREADY', 'MEDIA 
READY') THEN date_stamp_ist END) as first_app_viewed_date FROM df_raw_data 
GROUP BY gaid")

Данные выглядят следующим образом:

 - --------------------+---------------------+---------------------+
|                gaid|first_app_access_date|first_app_viewed_date|
+--------------------+---------------------+---------------------+
|00001C8A-2326-469...|           2018-09-03|           2018-09-03|
|00021783-C199-4FE...|           2018-09-01|           2018-09-01|
|0003432f-6e30-4c0...|           2018-09-04|           2018-09-04|
|000662ae-2b9b-468...|           2018-09-02|           2018-09-02|
|0009ac47-c7a2-4b6...|           2018-09-01|           2018-09-01|
|000c245b-58b1-492...|           2018-09-03|           2018-09-03|
|000f327b-56dc-4c8...|           2018-09-01|           2018-09-01|
|001149cb-f51c-4c0...|           2018-09-01|           2018-09-01|
|0013ad65-2843-4d3...|           2018-09-04|           2018-09-04|
|0015170a-fda1-41c...|           2018-09-05|           2018-09-05|
|001cf486-035a-43e...|           2018-09-04|           2018-09-04|
|001f2ecf-bf0f-47d...|           2018-09-03|                 null|
|002053e8-2cf6-43f...|           2018-09-04|           2018-09-04|
|002303e0-5aa4-4eb...|           2018-09-01|           2018-09-01|
|0025f65c-5818-4c3...|           2018-09-01|                 null|
|002807db-b0a2-487...|           2018-09-03|           2018-09-03|
|002befcc-cdfd-463...|           2018-09-01|           2018-09-01|
|00364046-b022-497...|           2018-09-02|                 null|

То, что я пытаюсь сделать, - это найти первый доступ к приложению и первое представление приложения для пользователя (gaid).

Теперь, когда я запускаю это для данных нового месяца, я хочу:

  1. Проверьте, присутствует ли прилив, поступающий в новых данных, в исторических данных или нет.
  2. Если он присутствует, это означает, что у нас уже есть первый доступ к приложению, и мы ничего не делаем.
  3. Если gaid отсутствует в исторических данных (это означает, что это новый идентификатор), он должен выполнить тот же запрос, чтобы вычислить первый доступ к приложению и первое представление приложения и вставить его в исторические данные.
  4. Для конкретной подсказки должен присутствовать первый доступ к приложению, и первое представление приложения может быть нулевым, так как у человека может быть доступ, но что-то было просмотрено позже.
  5. Для таких записей следует обновить первое представление приложения вчисторические данные.

Мне трудно это выполнить.Помощь будет очень признателен!

1 Ответ

0 голосов
/ 18 декабря 2018

На самом деле это очень большой проект, но я могу дать вам несколько советов из моего собственного опыта.

Для 1/2/3 я думаю, что вы должны использовать RoaringBitmap для хранения ваших гайд, что означает, что вам нужно конвертировать гайд в число типа int.Однако вам нужно обратить внимание на преобразование, потому что вы не можете сделать это простым способом, таким как String.hashCode (), который может привести к конфликту int в RoaringBitmap.

Для 4/5, это явно не типичный сценарий для файловой системы только для добавления, такой как HDFS.Чтобы достичь этого, вы должны воспользоваться некоторыми внешними распределенными базами данных или средами, такими как HBase, RocksDB и Alluxio.

...