1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-Quicksql

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 9.3 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 26.11.2024 05:28 746be7f

Quicksql — это продукт для работы с SQL-запросами, который можно использовать для запросов к определённому хранилищу данных или для коррелированных запросов к нескольким хранилищам. Он поддерживает реляционные базы данных, нереляционные базы данных и даже хранилища, которые не поддерживают SQL (например, Elasticsearch, Druid).

Кроме того, в Quicksql SQL-запрос может объединять или объединять данные из нескольких хранилищ. Например, вы можете выполнить унифицированный SQL-запрос в ситуации, когда часть данных хранится в Elasticsearch, а другая часть — в Hive.

Самое главное, что QSQL не зависит от какого-либо промежуточного вычислительного механизма, пользователям нужно только сосредоточиться на данных и унифицированной грамматике SQL для завершения статистики и анализа.

Архитектура

Схема архитектуры помогает вам легче получить доступ к Quicksql.

QSQL состоит из трёх уровней:

  • Уровень синтаксического анализа: используется для синтаксического анализа, проверки, оптимизации операторов SQL, разделения смешанных SQL и, наконец, генерации плана запроса;
  • Вычислительный уровень: для маршрутизации плана запроса к конкретному плану выполнения, затем интерпретируется в исполняемый код для данного хранилища или механизма (например, JSON-запрос Elasticsearch или HQL Hive);
  • Уровень хранения: для подготовки извлечения и хранения данных.

Основные функции

В большинстве случаев мы ожидаем использовать язык для анализа данных и не хотим рассматривать вещи, не связанные с анализом данных. Quicksql создан для этого.

Цель Quicksql — предоставить три функции:

  1. Унифицировать все структурированные запросы данных в грамматику SQL:
    • Использовать только SQL. В Quicksql вы можете запрашивать Elasticsearch следующим образом:
      SELECT state, pop FROM geo_mapping WHERE state = 'CA' ORDER BY state
    Даже запрос агрегации: sql SELECT approx_count_distinct(city), state FROM geo_mapping GROUP BY state LIMIT 10 Вы больше не будете раздражаться, потому что скобки в JSON-запросе не совпадают ;)
    • Устранить диалекты. В прошлом один и тот же семантический оператор необходимо было преобразовать в диалект для разных механизмов, например:
      SELECT * FROM geo_mapping                       -- MySQL Dialect
      LIMIT 10 OFFSET 10                              
      SELECT * FROM geo_mapping                       -- Oracle Dialect
      OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY          
    В Quicksql реляционные базы данных больше не имеют понятия диалектов. Вы можете использовать грамматику Quicksql для запроса любого механизма, вот так: sql SELECT * FROM geo_mapping LIMIT 10 OFFSET 10 -- Run Anywhere
  2. Защитить изоляцию между различными источниками данных. Рассмотрим ситуацию, когда вы хотите объединить таблицы, находящиеся в разных механизмах или не в одном кластере, у вас могут возникнуть проблемы. Однако в Quicksql вы можете запросить следующим образом:
    SELECT * FROM 
        (SELECT * FROM es_raw.profile AS profile    //index.tpye on Elasticsearch 
            WHERE note IS NOT NULL )AS es_profile
    INNER JOIN 
        (SELECT * FROM hive_db.employee AS emp  //database.table on Hive
        INNER JOIN hive_db.action AS act    //database.table on Hive
        ON emp.name = act.name) AS tmp 
    ON es_profile.prefer = tmp.prefer
  3. Выбрать наиболее подходящий способ выполнения запроса. Запрос, включающий несколько механизмов, может быть выполнен различными способами. Quicksql хочет объединить преимущества каждого механизма, чтобы найти наиболее подходящий.

Начало работы

Инструкции по сборке Quicksql из исходного кода см. в разделе «Начало работы». Отчёт об ошибках

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

И если проблема будет одобрена, коммиттер добавит перед описанием проблемы метку [QSQL-ID], чтобы она соответствовала коммиту. Например:

[QSQL-1002]: Views generated after splitting logical plan are redundant.

Вклад в проект

Мы приветствуем вклад в проект.

Если вам интересен Quicksql, вы можете загрузить исходный код с GitHub и выполнить следующую команду Maven в корневом каталоге проекта:

mvn -DskipTests clean package

Если вы планируете внести большой вклад, сначала поговорите с нами! Это поможет согласовать общий подход. Создайте проблему на GitHub для предложенной вами функции.

Форкните репозиторий GitHub и создайте ветку для вашей функции.

Разработайте свою функцию и тестовые примеры и убедитесь, что mvn install успешно выполняется. (Запустите дополнительные тесты, если ваше изменение этого требует.)

Внесите изменения в вашу ветку.

Если ваше изменение состоит из нескольких коммитов, используйте git rebase -i master, чтобы объединить их в один коммит и обновить ваш код до последней версии основной ветки.

Затем отправьте ваши коммиты на GitHub и создайте запрос на вытягивание из вашей ветки в основную ветку QSQL. Обновите случай JIRA, чтобы сослаться на ваш запрос на вытягивание, и коммиттер рассмотрит ваши изменения.

Запрос на вытягивание может потребовать обновления (после его отправки) по двум основным причинам:

  1. Вы обнаружили проблему после отправки запроса на вытягивание;
  2. Рецензент запросил дальнейшие изменения.

Чтобы обновить запрос на вытягивание, вам нужно внести изменения в свою ветку и затем отправить коммиты на GitHub. Рекомендуется использовать обычные (не перебазированные) коммиты поверх уже существующих.

Присоединяйтесь к нам

Slack Github QQ

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/mirrors-Quicksql.git
git@api.gitlife.ru:oschina-mirror/mirrors-Quicksql.git
oschina-mirror
mirrors-Quicksql
mirrors-Quicksql
master