keboola / db-writer-snowflake

Snowflake database writer
MIT License
0 stars 1 forks source link

Writer 2.0 #19

Open Halama opened 7 years ago

Halama commented 7 years ago

Aktuálně writer funguje tak že dostane libovolné SNFLK credentials a zapíše do databáze pomocí S3 COPY. Tohle je bez problému pro Snowflake účty dodané přímo zákazníky, mají to pod kontrolou.

Problematičtější je to pro writery které poskytuje Keboola - tzn. SNFLK schémata které leží ve stejné SNFLK accountu jako samotný backend projekt:

Writer by tedy měl podporovat pro Keboola provisioned credentials přímo prací s workspaces. Představa je taková že taková konfigurace by měla u sebe uloženu pouze referenci na workspace a mohla by vypadat např.:

{
      "workspaceId": 234,
      "tables": [
        {
          "tableId": "simple",
          "dbName": "simple",
          "export": true, 
          "incremental": true,
          "primaryKey": ["id"],
          "items": [
            {
              "name": "id",
              "dbName": "id",
              "type": "int",
              "size": null,
              "nullable": null,
              "default": null
            }
          ]                                
        }
      ]
    }

V tomhle případě by komponenta provedla Load data into workspace, k tomu by musela podporovat forward_token. Workspace by připravilo UI a credentials do něj ukázalo pouze jednou. Nově by podporovalo jejich reset - vygenerování nového hesla. UI bude pracovat z workspaces napřímo, využité Provisioningu úplně odpadne.

Původní funkčnost kdy jsou zadány celé credentials bude zachována pouze bude v appce přepnutí chování podle toho jaký typ credentials dostane. Zbytek konfigurace by měl být nezávislý na typu credentials, tzn. v obou případech bude vyplněný Input Mapping. Aby komponenta zbytečně neprováděla IM v případě Keboola workspace bude input mapping komponenty disablovaný pomocí staging_storage.input: none. Komponenta v případě že bude mít zadané db credentials bude muset provést IM sama pomocí https://github.com/keboola/input-mapping

Aby to celé fungovalo bude potřeba v dalších komponentách:

SAPI

Docker Runner

Výchází to z issue https://github.com/keboola/connection/issues/820 kde jsme se o tom bavili.

Halama commented 7 years ago

disablovani IM hotove https://github.com/keboola/db-writer-snowflake/issues/19

Halama commented 7 years ago

PB issue https://keboola.productboard.com/feature-board/6271-planning/features/340057

Halama commented 6 years ago

Ještě mě napadla jedna věc ohledně config rows. U varianty kdy to zapisuje do "cizího" snowflake by se hodilo kdyby jednotlivé tabulky na export byly uložené v rows. Zafungovalo by tak správně disablování atd.

U varianty kdy to loaduje přímo do workspace by to zase naopak nemělo být v config rows at tam není zbytečná režie a udělá se to celé v jednom SAPI jobu.

Nevím jestli ta kombinace obou chování by nebyl moc velký bastl. Zatím bych to asi nechal. Třeba z toho přímého loadovače do workspace časem vyleze něco čemu budeme říkat jinak než writer, občas se to někde nakouslo.

ondrejhlavacek commented 6 years ago

Možná ta režie nebude tak velká? Pokud někdo bude zapisovat desítky tabulek, tak asi jo :-/ Bastl to bude asi jen v UI, ale nějakým šikovným adaptérem by to nemuselo bejt tak hrozný (odpojení vizualizace configu od jeho uložený struktury).

Halama commented 6 years ago

Velka nebude ale precijenom to bude znat, zvlast v moment kdy treba ten load interne prepneme na CLONE.