Как сравнить ту же таблицу между Hive, Teradata - PullRequest
0 голосов
/ 02 июля 2019

У нас есть ситуация, когда мы копируем одни и те же таблицы в Hive, Teradata и vertica.

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

На данный момент мыиспользуйте python для загрузки таблиц в csv и сравнения их, но из-за размеров таблиц мы сталкиваемся с трудностями в этом подходе.

with open('hive.csv', 'r') as t1, open('teradat.csv', 'r') as t2:
    hivedata = t1.readlines()
    teradata = t2.readlines()

with open('differences.csv', 'w') as outFile:
    for line in teradata:
        if line not in hivedata:
            outFile.write(line)

Может кто-нибудь предложить лучший способ сравнить таблицы между любыми двумя вданное время.

Я могу использовать python, spark / pyspark для достижения этой цели.

1 Ответ

1 голос
/ 04 июля 2019

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

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

best - получить согласие всех вовлеченных людей на вычисление числового хеш-значения, которое во всех Hive, Teradata и Vertica будет возвращать одно и то же целое число с точно такой же строкой таблицы данные. Суммирование всех значений хеш-функции в каждой таблице на каждой платформе и получение одинакового результата везде должно достаточно показать, что данные одинаковы. Однако кто-то может возразить, что вы можете столкнуться с хеш-коллизиями, и, следовательно, это не совсем точно (даже если риск коллизии хэшей очень и очень низок).

Если у вас абсолютно есть для сравнения фактических данных таблицы - перенесите данные только одной таблицы в другую базу данных. В Vertica (вероятно, лучший снимок, поскольку он может быть весьма впечатляющим по производительности при работе такого типа), CREATE TABLE cmp_<table_name> LIKE <table_name>;, а затем найдите самый быстрый способ передачи данных из другой базы данных в Vertica. И экспорт в CSV в один поток часто не самый быстрый. Рассмотрим несколько параллельных заданий, каждое из которых обрабатывает свое подмножество данных таблицы. И рассмотрим программы, которые параллельно с этим читают в память и используют эту память для заполнения INSERT маркерами параметров в очень больших массивах. Наконец, SELECT * FROM <table_name> EXCEPT SELECT * FROM cmp_<table_name>;. Этот запрос должен вернуть пустой набор строк.

Удачи -

...