Skip to content

darthunix/gp_parser

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Что это?

Это небольшая библиотека, которая позволяет посмотреть синтаксическое дерево разбора запроса парсером в greenplum. Для использования нужно скомпилировать библиотеку annotate_query.so на мастере greenplum, распространить ее по кластеру (например, через gpscp) и создать обертку в виде sql функции для работы с библиотекой.

Как это использовать?

Все шаги ниже производятся на мастере.

  • Перед компиляцией библиотеки нам потребуется файл outfuncs.c из исходников greenplum для отображения дерева разбора запроса в текстовом виде. Поэтому, придется рядом положить исходники greenplum с HEAD установленным на коммит или тег вашей версии сборки (так как вдруг что-то поменялось в функционале отображения дерева разбора в текст). Коммит или тег можно посмотреть выполнив select version(); в greenplum.
git clone https://github.com/darthunix/gp_parser.git
cd gp_parser
# Создаем каталог для исходных кодов gpdb и вытягиваем их в минималистичном варианте для нашего тега или коммита
mkdir gpdb
cd gpdb
git init
git remote add origin https://github.com/greenplum-db/gpdb.git
# git fetch --depth=1 origin 2155c5a8cf8bb7f13f49c6e248fd967a74fed591
git fetch --depth=1 origin 5.8.0
git reset --hard FETCH_HEAD
cd ..
  • Скомпилировать библиотеку с помощью make. Должен появиться файл annotate_query.so

  • Нужно распространить библиотеку по всем хостам кластера в каталог с библиотеками greenplum. Возможно, придется это делать из-под sudo в зависимости от прав на целевой каталог

gpscp -f all_hosts.hosts annotate_query.so =:$(pg_config --pkglibdir)
# gpscp -h mdw -h sdw1 -h sdw2 annotate_query.so =:$(pg_config --pkglibdir)
  • После необходимо создать функцию-обертку на sql над функциями в библиотеке
psql -f annotate_query.sql your_database
  • Проверим синтаксическое дерево разбора тестового запроса
select annotate_query($$
  select 1
$$);
-----------------------------------------------------------------------------------------------
({SELECT :distinctClause <> :intoClause <> :targetList ({RESTARGET :name <> :indirection <> :val {A_CONST 1 :typename <>} :location 10}) :fromClause <> :whereClause <> :groupClause <> :havingClause <> :w
indowClause <> :valuesLists <> :sortClause <> :scatterClause <> :withClause <> :limitOffset <> :limitCount <> :lockingClause <> :op 0 :all false :larg <> :rarg <> :distributedBy <>})
(1 row)

Основано на проекте

https://github.com/pganalyze/queryparser

About

Greenplum query parser

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 80.1%
  • Makefile 19.9%