"use strict";(self.webpackChunkdocu=self.webpackChunkdocu||[]).push([[33596],{57465:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>r,default:()=>h,frontMatter:()=>l,metadata:()=>d,toc:()=>o});var s=n(13274),i=n(95707);const l={},r="Cumul.io",d={id:"integrations/destinations/cumulio",title:"Cumul.io",description:"General",source:"@site/../docs/integrations/destinations/cumulio.md",sourceDirName:"integrations/destinations",slug:"/integrations/destinations/cumulio",permalink:"/integrations/destinations/cumulio",draft:!1,unlisted:!1,editUrl:"https://github.com/airbytehq/airbyte/blob/master/docs/../docs/integrations/destinations/cumulio.md",tags:[],version:"current",frontMatter:{},sidebar:"docs",previous:{title:"Convex",permalink:"/integrations/destinations/convex"},next:{title:"Databend",permalink:"/integrations/destinations/databend"}},a={},o=[{value:"General",id:"general",level:2},{value:"Getting started",id:"getting-started",level:2},{value:"Connector overview",id:"connector-overview",level:2},{value:"Sync modes support",id:"sync-modes-support",level:3},{value:"Airbyte Features support",id:"airbyte-features-support",level:3},{value:"Airbyte data types support",id:"airbyte-data-types-support",level:3},{value:"Output schema in Cumul.io",id:"output-schema-in-cumulio",level:3},{value:"Data recommendations",id:"data-recommendations",level:2},{value:"Data structure",id:"data-structure",level:3},{value:"Pushing data",id:"pushing-data",level:3},{value:"Possible future improvements",id:"possible-future-improvements",level:2},{value:"Changelog",id:"changelog",level:2}];function c(e){const t={a:"a",code:"code",em:"em",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components},{Details:n,DocMetaTags:l,HeaderDecoration:r}=t;return n||u("Details",!0),l||u("DocMetaTags",!0),r||u("HeaderDecoration",!0),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(l,{title:"destination-cumulio Connector | Airbyte Documentation",description:"Connect destination-cumulio to our ETL/ELT platform for streamlined data integration, automated syncing, and powerful data insights."}),"\n","\n",(0,s.jsx)(r,{isOss:"false",isCloud:"false",supportLevel:"archived",iconUrl:"https://connectors.airbyte.com/files/metadata/airbyte/destination-cumulio/latest/icon.svg",originalTitle:"Cumul.io",originalId:"cumulio",isLatestCDKString:"FALSE"}),"\n",(0,s.jsx)(t.h2,{id:"general",children:"General"}),"\n",(0,s.jsxs)(t.p,{children:["The Airbyte Cumul.io destination connector allows you to stream data into Cumul.io from\n",(0,s.jsx)(t.a,{href:"https://airbyte.io/connectors?connector-type=Sources",children:"any Airbyte Source"}),"."]}),"\n",(0,s.jsxs)(t.p,{children:["Cumul.io is an ",(0,s.jsx)(t.strong,{children:(0,s.jsx)(t.a,{href:"https://cumul.io/product/embedded-analytics",children:"Embedded analytics SaaS solution"})}),"\nthat enables other SaaS companies to grow with an ",(0,s.jsx)(t.strong,{children:"engaging customer analytics experience"}),",\nseamlessly embedded in their product. Cumul.io's intuitive, low-code interface empowers business\nusers with insight-driven actions in record time ",(0,s.jsx)(t.strong,{children:"without straining engineering resources from the\ncore product"}),"."]}),"\n",(0,s.jsx)(t.h2,{id:"getting-started",children:"Getting started"}),"\n",(0,s.jsxs)(t.p,{children:["In order to use the Cumul.io destination, you'll first need to ",(0,s.jsxs)(t.strong,{children:["create a\n",(0,s.jsx)(t.a,{href:"https://app.cumul.io/signup",children:"Cumul.io account"})]})," (if you don\u2019t already have one). After logging in\nto Cumul.io, you can ",(0,s.jsx)(t.strong,{children:"generate an API key and token"})," in your\n",(0,s.jsx)(t.a,{href:"https://app.cumul.io/start/profile/integration",children:"Profile -> API Tokens"}),". To set up the destination\nconnector in Airbyte, you'll need to provide the following Cumul.io properties:"]}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:['"',(0,s.jsx)(t.strong,{children:"Cumul.io API Host URL"}),'": the API host URL for the ',(0,s.jsx)(t.strong,{children:"Cumul.io environment"})," where your\n",(0,s.jsx)(t.strong,{children:"Cumul.io account resides"})," (i.e. ",(0,s.jsx)(t.code,{children:"https://api.cumul.io"})," for EU multi-tenant users,\n",(0,s.jsx)(t.code,{children:"https://api.us.cumul.io/"})," for US multi-tenant users, or a VPC-specific address). This property\ndepends on the environment in which your Cumul.io account was created (e.g. if you have signed up\nvia ",(0,s.jsx)(t.a,{href:"https://app.us.cumul.io/signup",children:"https://app.us.cumul.io/signup"}),", the API host URL would be ",(0,s.jsx)(t.code,{children:"https://api.us.cumul.io/"}),")."]}),"\n",(0,s.jsxs)(t.li,{children:['"',(0,s.jsx)(t.strong,{children:"Cumul.io API key"}),'": a Cumul.io API key (see above how to generate an API key-token pair)']}),"\n",(0,s.jsxs)(t.li,{children:['"',(0,s.jsx)(t.strong,{children:"Cumul.io API token"}),'": the corresponding Cumul.io API token (see above how to generate an API\nkey-token pair)']}),"\n"]}),"\n",(0,s.jsxs)(t.p,{children:["As soon as you've connected a source and the ",(0,s.jsx)(t.strong,{children:"first stream synchronization"})," has ",(0,s.jsx)(t.strong,{children:"succeeded"}),", the\ndesired ",(0,s.jsx)(t.strong,{children:"Dataset(s)"})," will be ",(0,s.jsx)(t.strong,{children:"available in Cumul.io to build dashboards on"})," (Cumul.io's\n",(0,s.jsx)(t.a,{href:"https://academy.cumul.io/course/a0bf5530-edfb-441e-901b-e1fcb95dfac7",children:'"Getting started" Academy course'}),"\nmight be interesting to get familiar with its platform). Depending on the ",(0,s.jsx)(t.strong,{children:"synchronization mode"}),"\nset up, the ",(0,s.jsx)(t.strong,{children:"next synchronizations"})," will either ",(0,s.jsx)(t.strong,{children:"replace/append data in/to these datasets"}),"!"]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsxs)(t.em,{children:["If you have any questions or want to get started with Cumul.io, don't hesitate to reach out via\n",(0,s.jsx)(t.a,{href:"https://cumul.io/contact",children:"our contact page"}),"."]})}),"\n",(0,s.jsx)(t.h2,{id:"connector-overview",children:"Connector overview"}),"\n",(0,s.jsx)(t.h3,{id:"sync-modes-support",children:"Sync modes support"}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{style:{textAlign:"left"},children:(0,s.jsx)(t.a,{href:"https://docs.airbyte.com/understanding-airbyte/connections/#sync-modes",children:"Sync modes"})}),(0,s.jsx)(t.th,{style:{textAlign:"left"},children:"Supported?(Yes/No)"}),(0,s.jsx)(t.th,{style:{textAlign:"left"},children:"Notes"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:(0,s.jsx)(t.a,{href:"https://docs.airbyte.com/understanding-airbyte/connections/full-refresh-append/",children:"Full Refresh - Append"})}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Yes"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"/"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:(0,s.jsx)(t.a,{href:"https://docs.airbyte.com/understanding-airbyte/connections/full-refresh-overwrite/",children:"Full Refresh - Replace"})}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Yes"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"/"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:(0,s.jsx)(t.a,{href:"https://docs.airbyte.com/understanding-airbyte/connections/incremental-append/",children:"Incremental Sync - Append"})}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Yes"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"/"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:(0,s.jsx)(t.a,{href:"https://docs.airbyte.com/understanding-airbyte/connections/incremental-append-deduped",children:"Incremental - Append + Deduped "})}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"No"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Cumul.io's data warehouse does not support dbt (yet)."})]})]})]}),"\n",(0,s.jsx)(t.h3,{id:"airbyte-features-support",children:"Airbyte Features support"}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{style:{textAlign:"left"},children:"Feature"}),(0,s.jsx)(t.th,{style:{textAlign:"left"},children:"Supported?(Yes/No)"}),(0,s.jsx)(t.th,{style:{textAlign:"left"},children:"Notes"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:(0,s.jsx)(t.a,{href:"https://docs.airbyte.com/understanding-airbyte/namespaces/",children:"Namespaces"})}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Yes"}),(0,s.jsxs)(t.td,{style:{textAlign:"left"},children:["(",(0,s.jsx)(t.strong,{children:(0,s.jsx)(t.em,{children:"Highly recommended"})}),") A ",(0,s.jsx)(t.strong,{children:"concatenation of the namespace and stream name"})," will be used as a unique identifier for the related Cumul.io dataset (using ",(0,s.jsx)(t.a,{href:"https://academy.cumul.io/article/mam7lkdt",children:"Tags"}),") and ensures next synchronizations can target the same dataset. Use this property to ",(0,s.jsx)(t.strong,{children:"ensure identically named destination streams"})," from different connections ",(0,s.jsx)(t.strong,{children:"do not coincide"}),"!"]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:(0,s.jsx)(t.a,{href:"https://docs.airbyte.com/operator-guides/clear",children:"Clear data"})}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Yes"}),(0,s.jsxs)(t.td,{style:{textAlign:"left"},children:[(0,s.jsx)(t.strong,{children:"Existing data"})," in a dataset is ",(0,s.jsx)(t.strong,{children:"not deleted"}),' upon resetting a stream in Airbyte, however the next synchronization batch will replace all existing data. This ensures that the dataset is never empty (e.g. upon disabling the synchronization), which would otherwise result in "No data" upon querying it.']})]})]})]}),"\n",(0,s.jsx)(t.h3,{id:"airbyte-data-types-support",children:"Airbyte data types support"}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{style:{textAlign:"left"},children:(0,s.jsx)(t.a,{href:"https://docs.airbyte.com/understanding-airbyte/supported-data-types#the-types",children:"Airbyte data types"})}),(0,s.jsx)(t.th,{style:{textAlign:"left"},children:"Remarks"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Array & Object"}),(0,s.jsxs)(t.td,{style:{textAlign:"left"},children:["To support a limited amount of insights, this connector will ",(0,s.jsxs)(t.strong,{children:["stringify data values with type ",(0,s.jsx)(t.code,{children:"Array"})," or ",(0,s.jsx)(t.code,{children:"Object"})]})," (",(0,s.jsx)(t.a,{href:"https://docs.airbyte.com/understanding-airbyte/supported-data-types/#unsupported-types",children:"recommended by Airbyte"}),") as Cumul.io does not support storing nor querying such data types. For analytical purposes, it's always recommended to ",(0,s.jsx)(t.strong,{children:"unpack these values in different rows or columns"})," (depending on the use-case) before pushing the data to Cumul.io!"]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Time with(out) timezone"}),(0,s.jsxs)(t.td,{style:{textAlign:"left"},children:["While these values ",(0,s.jsx)(t.strong,{children:"will be stored as-is"})," in Cumul.io, they should be interpreted as ",(0,s.jsx)(t.code,{children:"hierarchy"}),"* (i.e. text/string, see ",(0,s.jsx)(t.a,{href:"https://academy.cumul.io/article/p68253bn",children:"Cumul.io's data types Academy article"}),"). Alternatively, you could either ",(0,s.jsx)(t.strong,{children:"provide a (default) date and timezone"})," for these values, or ",(0,s.jsx)(t.strong,{children:"unpack them in different columns"})," (e.g. ",(0,s.jsx)(t.code,{children:"hour"}),", ",(0,s.jsx)(t.code,{children:"minute"}),", ",(0,s.jsx)(t.code,{children:"second"})," columns), before pushing the data to Cumul.io."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Timestamp without timezone"}),(0,s.jsxs)(t.td,{style:{textAlign:"left"},children:["Cumul.io ",(0,s.jsx)(t.strong,{children:"does not support storing dates without timestamps"}),", these timestamps will be ",(0,s.jsx)(t.strong,{children:"interpreted as UTC date values"}),"."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Number & Integer data types with NaN, Infinity, -Infinity values"}),(0,s.jsxs)(t.td,{style:{textAlign:"left"},children:["While these values ",(0,s.jsx)(t.strong,{children:"will be stored as-is"})," in Cumul.io, they will not support numeric aggregations such as sum, avg, etc. (",(0,s.jsx)(t.em,{children:"using such aggregations on these values likely causes unexpected behavior"}),"). Ideally, such values are ",(0,s.jsx)(t.strong,{children:"converted into meaningful values"})," (e.g. no value, 0, a specific value, etc.) before pushing the data to Cumul.io."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Boolean"}),(0,s.jsxs)(t.td,{style:{textAlign:"left"},children:["Boolean values ",(0,s.jsx)(t.strong,{children:"will be stringified"})," (",(0,s.jsx)(t.a,{href:"https://docs.airbyte.com/understanding-airbyte/supported-data-types/#unsupported-types",children:"recommended by Airbyte"}),") and result in a hierarchy column type (i.e. text/string, see ",(0,s.jsx)(t.a,{href:"https://academy.cumul.io/article/p68253bn",children:"Cumul.io's data types Academy article"}),"). You could use Cumul.io's hierarchy translation (see ",(0,s.jsx)(t.a,{href:"https://academy.cumul.io/article/dqgn0316",children:"this Academy article"}),") to assign translations to ",(0,s.jsx)(t.code,{children:"true"})," and ",(0,s.jsx)(t.code,{children:"false"})," that are meaningful to the business user in the column's context."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"All other data types"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Should be supported and correctly interpreted by Cumul.io's Data API service*."})]})]})]}),"\n",(0,s.jsxs)(t.p,{children:["*",(0,s.jsxs)(t.em,{children:["Note: It might be that Cumul.io's automatic typing could initially interpret this type of data\nwrongly due to its format (see ",(0,s.jsx)(t.code,{children:"Possible future improvements"})," below), you could then alter the\ncolumn type in the Cumul.io UI to try changing it manually."]})]}),"\n",(0,s.jsx)(t.h3,{id:"output-schema-in-cumulio",children:"Output schema in Cumul.io"}),"\n",(0,s.jsxs)(t.p,{children:["Each replicated stream from Airbyte will output data into a corresponding dataset in Cumul.io. Each\ndataset will ",(0,s.jsx)(t.strong,{children:"initially"})," have an ",(0,s.jsxs)(t.strong,{children:[(0,s.jsx)(t.code,{children:"Airbyte - <namespace><stream_name>"})," English name"]})," which can\nbe ",(0,s.jsx)(t.strong,{children:"further adapted in Cumul.io's UI"}),", or even\n",(0,s.jsx)(t.a,{href:"https://developer.cumul.io/#dashboard_update",children:"via API"}),". If the request of pushing a batch of data\nfails, the connector will gracefully retry pushing the batch up to three times, with a backoff\ninterval of 5 minutes, 10 minutes, and 20 minutes, respectively."]}),"\n",(0,s.jsxs)(t.p,{children:["The connector will ",(0,s.jsx)(t.strong,{children:"associate one or more of the following tags to each dataset"}),":"]}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"[AIRBYTE - DO NOT DELETE] - <namespace><stream_name>"}),": this tag will be ",(0,s.jsx)(t.strong,{children:"used to retrieve the\ndataset ID and its current columns"})," from Cumul.io, and will be associated with the dataset after\nthe first batch of data is written to a new dataset."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"[AIRBYTE - DO NOT DELETE] - REPLACE DATA"}),": this tag will be ",(0,s.jsx)(t.strong,{children:"associated to a dataset"}),' when it\nshould be "resetted" (i.e. the ',(0,s.jsx)(t.strong,{children:"existing data should be replaced"}),", see ",(0,s.jsx)(t.code,{children:"Feature"})," -> ",(0,s.jsx)(t.code,{children:"Reset data"}),"\nabove). The first batch of data of the next synchronization will replace all existing data if this\ntag is present on a dataset."]}),"\n"]}),"\n",(0,s.jsxs)(t.p,{children:["As noted in the tag name, it is important to ",(0,s.jsx)(t.strong,{children:"never remove such tags from the dataset(s) nor\nmanually set them"})," on other datasets. Doing so might break existing or new synchronizations!"]}),"\n",(0,s.jsx)(t.h2,{id:"data-recommendations",children:"Data recommendations"}),"\n",(0,s.jsx)(t.h3,{id:"data-structure",children:"Data structure"}),"\n",(0,s.jsxs)(t.p,{children:["To ensure the most performant queries, we recommend to ",(0,s.jsx)(t.strong,{children:"denormalize your data as much as possible\nbeforehand"})," (this ensures that the least amount of joins are required to achieve your desired\ninsights). Denormalized datasets also ensure that they can be easily consumed by less technical\nusers, who often do not understand relations between tables! Instead of denormalizing your datasets\nto specific insights, it is recommended to ",(0,s.jsx)(t.strong,{children:"set up one or more dimensional data models"})," that\nsupport all kinds of slicing and dicing within a dashboard: this ensures a ",(0,s.jsx)(t.strong,{children:"flexible & scalable\nsetup"})," which is ",(0,s.jsx)(t.strong,{children:"easy-to-understand and performant-to-query"}),"!"]}),"\n",(0,s.jsxs)(t.p,{children:["This Cumul.io blog post goes into more detail on why customer-facing analytics requires a simple\ndata model: ",(0,s.jsx)(t.a,{href:"https://blog.cumul.io/2022/12/07/why-a-dimensional-data-model-for-embedded-analytics/",children:"https://blog.cumul.io/2022/12/07/why-a-dimensional-data-model-for-embedded-analytics/"}),"."]}),"\n",(0,s.jsx)(t.h3,{id:"pushing-data",children:"Pushing data"}),"\n",(0,s.jsxs)(t.p,{children:["Cumul.io uses an ",(0,s.jsx)(t.strong,{children:"OLAP database"})," to ",(0,s.jsx)(t.strong,{children:'ensure the most performant concurrent "Read" queries'}),' on\nlarge amounts of data. OLAP databases, such as Cumul.io\'s database, are however often less suitable\nfor a lot of "Write" queries with small amounts of data.']}),"\n",(0,s.jsxs)(t.p,{children:["To ensure the best performance when writing data, we ",(0,s.jsx)(t.strong,{children:"recommend synchronizing larger amounts of\ndata less frequently"})," rather than ",(0,s.jsx)(t.em,{children:"smaller amounts of data more frequently"}),"!"]}),"\n",(0,s.jsx)(t.h2,{id:"possible-future-improvements",children:"Possible future improvements"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["In case of many concurrent synchronizations, the following issues might arise at one point (not\nevaluated yet):","\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["The combination of all write buffers' data could cause memory overload, in that case it might be\ninteresting to alter the flush rate by changing the ",(0,s.jsx)(t.code,{children:"flush_interval"})," variable in\n",(0,s.jsx)(t.code,{children:"destination_cumulio/writer.py"})," (currently set to 10 000, which is the maximum amount of data\npoints that can be sent via Cumul.io's Data API service in a single request, see note\n",(0,s.jsx)(t.a,{href:"https://developer.cumul.io/#data_create",children:"here"}),"). We do recommend keeping the ",(0,s.jsx)(t.code,{children:"flush_interval"}),"\nvalue ",(0,s.jsx)(t.strong,{children:"as high as possible"})," to ensure the least amount of total overhead on all batches\npushed!"]}),"\n",(0,s.jsxs)(t.li,{children:["Having more than 200 concurrent Airbyte connections flushing the data simultaneously, and using\nthe same Cumul.io API key and token for each connection, might run into\n",(0,s.jsx)(t.a,{href:"https://developer.cumul.io/#core_api_ratelimiting",children:"Cumul.io's API Rate limit"}),". As this will\nrarely occur due to Cumul.io's burstable rate limit, we recommend using separate API key and\ntokens for identical destination connectors in case you would expect such concurrency. Note that\nsynchronizing multiple streams in a single connection will happen sequentially and thus not run\ninto the rate limit."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["The current connector will not take into account the Airbyte source data types, instead Cumul.io's\nAPI will automatically detect column types based on a random data sample. If Cumul.io's detected\ndata type is not as desired, it's possible to alter the column's type via Cumul.io's UI to\nmanually change the column type (e.g. if a ",(0,s.jsx)(t.code,{children:"VARCHAR"})," column would only contain numeric values, it\ncould initially be interpreted as a ",(0,s.jsx)(t.code,{children:"numeric"})," column in Cumul.io but can at any point be changed\nto ",(0,s.jsx)(t.code,{children:"hierarchy"})," if more appropriate).","\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["As a future improvement, it is possible to:","\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{children:["Create a new dataset -\n",(0,s.jsx)(t.a,{href:"https://developer.cumul.io/#dataset_create",children:"Create Dataset API Documentation"})]}),"\n",(0,s.jsxs)(t.li,{children:["Create the appropriate tag (",(0,s.jsx)(t.code,{children:"[AIRBYTE - DO NOT DELETE] - <stream_name>"}),") and associate it\nwith the newly created dataset (in ",(0,s.jsx)(t.code,{children:"destination_cumulio/client.py"}),", a method\n",(0,s.jsx)(t.code,{children:"_validate_tag_dataset_id_association(stream_name, dataset_id)"})," is defined which could be\nused for this step)"]}),"\n",(0,s.jsxs)(t.li,{children:["Create each column with the correct Cumul.io type -\n",(0,s.jsx)(t.a,{href:"https://developer.cumul.io/#column_create",children:"Create Column API Documentation"})]}),"\n",(0,s.jsxs)(t.li,{children:["Associate each column with the dataset -\n",(0,s.jsx)(t.a,{href:"https://developer.cumul.io/#column_assoc_dataset",children:"Associate Dataset Column API Documentation"})]}),"\n",(0,s.jsx)(t.li,{children:"From there on out, you can replace/append data for this dataset based on the tag (already\nimplemented)."}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"changelog",children:"Changelog"}),"\n",(0,s.jsxs)(n,{children:[(0,s.jsx)("summary",{children:"Expand to review"}),(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{style:{textAlign:"left"},children:"Version"}),(0,s.jsx)(t.th,{style:{textAlign:"left"},children:"Date"}),(0,s.jsx)(t.th,{style:{textAlign:"left"},children:"Pull Request"}),(0,s.jsx)(t.th,{style:{textAlign:"left"},children:"Subject"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"0.1.29"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2025-01-11"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:(0,s.jsx)(t.a,{href:"https://github.com/airbytehq/airbyte/pull/51261",children:"51261"})}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Update dependencies"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"0.1.28"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2024-12-28"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:(0,s.jsx)(t.a,{href:"https://github.com/airbytehq/airbyte/pull/50504",children:"50504"})}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Update dependencies"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"0.1.27"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2024-12-21"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:(0,s.jsx)(t.a,{href:"https://github.com/airbytehq/airbyte/pull/50167",children:"50167"})}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Update dependencies"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"0.1.26"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2024-12-14"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:(0,s.jsx)(t.a,{href:"https://github.com/airbytehq/airbyte/pull/49302",children:"49302"})}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Update dependencies"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"0.1.25"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2024-11-25"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:(0,s.jsx)(t.a,{href:"https://github.com/airbytehq/airbyte/pull/48679",children:"48679"})}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Update dependencies"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"0.1.24"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2024-11-04"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:(0,s.jsx)(t.a,{href:"https://github.com/airbytehq/airbyte/pull/47029",children:"47029"})}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Update dependencies"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"0.1.23"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2024-10-12"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:(0,s.jsx)(t.a,{href:"https://github.com/airbytehq/airbyte/pull/46816",children:"46816"})}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Update dependencies"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"0.1.22"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2024-10-05"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:(0,s.jsx)(t.a,{href:"https://github.com/airbytehq/airbyte/pull/46445",children:"46445"})}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Update dependencies"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"0.1.21"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2024-09-28"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:(0,s.jsx)(t.a,{href:"https://github.com/airbytehq/airbyte/pull/46201",children:"46201"})}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Update dependencies"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"0.1.20"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2024-09-21"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:(0,s.jsx)(t.a,{href:"https://github.com/airbytehq/airbyte/pull/45831",children:"45831"})}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Update dependencies"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"0.1.19"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2024-09-14"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:(0,s.jsx)(t.a,{href:"https://github.com/airbytehq/airbyte/pull/45580",children:"45580"})}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Update dependencies"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"0.1.18"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2024-09-07"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:(0,s.jsx)(t.a,{href:"https://github.com/airbytehq/airbyte/pull/45291",children:"45291"})}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Update dependencies"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"0.1.17"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2024-08-31"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:(0,s.jsx)(t.a,{href:"https://github.com/airbytehq/airbyte/pull/45033",children:"45033"})}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Update dependencies"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"0.1.16"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2024-08-24"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:(0,s.jsx)(t.a,{href:"https://github.com/airbytehq/airbyte/pull/44656",children:"44656"})}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Update dependencies"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"0.1.15"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2024-08-22"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:(0,s.jsx)(t.a,{href:"https://github.com/airbytehq/airbyte/pull/44530",children:"44530"})}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Update test dependencies"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"0.1.14"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2024-08-17"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:(0,s.jsx)(t.a,{href:"https://github.com/airbytehq/airbyte/pull/44283",children:"44283"})}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Update dependencies"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"0.1.13"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2024-08-10"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:(0,s.jsx)(t.a,{href:"https://github.com/airbytehq/airbyte/pull/43695",children:"43695"})}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Update dependencies"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"0.1.12"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2024-08-03"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:(0,s.jsx)(t.a,{href:"https://github.com/airbytehq/airbyte/pull/43178",children:"43178"})}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Update dependencies"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"0.1.11"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2024-07-27"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:(0,s.jsx)(t.a,{href:"https://github.com/airbytehq/airbyte/pull/42780",children:"42780"})}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Update dependencies"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"0.1.10"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2024-07-20"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:(0,s.jsx)(t.a,{href:"https://github.com/airbytehq/airbyte/pull/42281",children:"42281"})}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Update dependencies"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"0.1.9"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2024-07-13"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:(0,s.jsx)(t.a,{href:"https://github.com/airbytehq/airbyte/pull/41711",children:"41711"})}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Update dependencies"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"0.1.8"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2024-07-10"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:(0,s.jsx)(t.a,{href:"https://github.com/airbytehq/airbyte/pull/41341",children:"41341"})}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Update dependencies"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"0.1.7"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2024-07-09"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:(0,s.jsx)(t.a,{href:"https://github.com/airbytehq/airbyte/pull/41104",children:"41104"})}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Update dependencies"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"0.1.6"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2024-07-06"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:(0,s.jsx)(t.a,{href:"https://github.com/airbytehq/airbyte/pull/40763",children:"40763"})}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Update dependencies"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"0.1.5"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2024-06-26"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:(0,s.jsx)(t.a,{href:"https://github.com/airbytehq/airbyte/pull/40507",children:"40507"})}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Update dependencies"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"0.1.4"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2024-06-21"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:(0,s.jsx)(t.a,{href:"https://github.com/airbytehq/airbyte/pull/39930",children:"39930"})}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Update dependencies"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"0.1.3"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2024-06-06"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:(0,s.jsx)(t.a,{href:"https://github.com/airbytehq/airbyte/pull/39292",children:"39292"})}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"[autopull] Upgrade base image to v1.2.2"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"0.1.2"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2024-05-20"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:(0,s.jsx)(t.a,{href:"https://github.com/airbytehq/airbyte/pull/38371",children:"38371"})}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"[autopull] base image + poetry + up_to_date"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"0.1.1"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2024-03-05"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:(0,s.jsx)(t.a,{href:"https://github.com/airbytehq/airbyte/pull/35838",children:"#35838"})}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Un-archive connector"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"0.1.0"}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"2023-02-16"}),(0,s.jsx)(t.td,{style:{textAlign:"left"}}),(0,s.jsx)(t.td,{style:{textAlign:"left"},children:"Initial release of Cumul.io's Destination connector"})]})]})]})]})]})}function h(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}function u(e,t){throw new Error("Expected "+(t?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}},95707:(e,t,n)=>{n.d(t,{R:()=>r,x:()=>d});var s=n(79474);const i={},l=s.createContext(i);function r(e){const t=s.useContext(l);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),s.createElement(l.Provider,{value:t},e.children)}}}]);