Closed ErikZigo closed 3 years ago
Vsechny veci jsem se snazil pokryt testy
Když neprojde ta validace tak to hodí user error že? Jak to ale opravím když chci např. přidat nebo odebrat sloupec? Asi tomu chybí nějaká podpora pro akci která to vyřeší ne? tzn. i úprava UI a další featury.
Půjde to v pohodě nasadit aniž by to něco rozbilo? Koukám že tahle feature je teď jenom pro full load tak tam by u pravidelně loadovaných tabulek nemělo hrozit že se struktura bude lišit.
Myslíš si teda že je to takhle publikovatelný? Jestli něco nepřehlížím tak mi přijde že to není ready k nasazení. Tím pádem bych byl pro teď releasnout ten SWAP tabulek, to musí být za dvě hoďky max hotové.
@ErikZigo v tejto issue (posledne 2 commenty) je navrh ako to spravit s tym updatom. https://github.com/keboola/db-writer-common/issues/7
Jakej swap?
ALTER TABLE [ IF EXISTS ] <name> SWAP WITH <target_table_name>
https://docs.snowflake.net/manuals/sql-reference/sql/alter-table.html
Jak jsem se v tom vrtal tak jsem to rovnou spíchnul https://github.com/keboola/db-writer-snowflake/pull/55 Jedou nad tím testy, pak to bude chtít případně začistit.
Co teda s tymto @ErikZigo?
@MiroCillik nevim, napada me dodelat:
synchronizeStructure
ten by byl defaultne vypnuty a v UI by se nedal nastavitFungovalo by to tak, ze by ti failnul writer a ty bys mohl v UI udelat: 1) kliknout na tlacitko smaz tabulku v cilove DB 2) kliknout na tlactiko sesynchronizuj tuhle tabulku To by zalozilo novy job ktery by udelal alter ty cilovy tabulky + do ni nahral data
POC pro https://github.com/keboola/db-writer-snowflake/issues/49
Validace
Metoda
Writer\Snowflake::validateTable()
pro validaci mappingu oproti existujici tabulce v DBPorovnava:
Writer\Snowflake::checkPrimaryKey()
Writer\Snowflake::checkColumns()
Writer\Snowflake::checkDataTypes()
Funguje to tak, ze zavolam query
DESC TABLE
a vysledek prevedu na pole obsahujiciSnowflake\DataType\Definition
(rozsiruje https://github.com/keboola/php-datatypes).Abych to mohl porovnavat s mappingem, tak jsem pridal par metod:
Snowflake\DataType\Definition::stripDefaultValueQuoting()
- Pro string sloupce totiz Snowflake vraci hodnotu quotovanou v popisu tabulkySnowflake\DataType\Definition:: getSnowflakeDefaultLength()
- defaultni hodnotysize
pro jednotlive datove typySnowflake\DataType\Definition:: getSnowflakeBaseType()
- z duvodu ze nase internigetBaseType
neni kompatibilni s tim jak to funguje ve SnowflakuUpravy
Writer\Snowflake::quoteIdentifier()
replaced bySnowflake\Connection::quoteIdentifier()
Writer\Snowflake::quote()
moved toSnowflake\Connection::quote()
Writer\Snowflake::getColumnsSqlDefinition()
vyuzivaSnowflake\DataType\Definition::getSQLDefinition()
+ je tam docasny lokalni fix pro https://github.com/keboola/php-datatypes/issues/17