From 141fc434de4f8da9e4b0ead5811bd93b7b9b9b28 Mon Sep 17 00:00:00 2001 From: Matej Petrovcic Date: Sat, 16 Oct 2021 01:40:11 +0200 Subject: [PATCH 001/130] Update mssql-profile.md Missing database: in yml --- website/docs/reference/warehouse-profiles/mssql-profile.md | 1 + 1 file changed, 1 insertion(+) diff --git a/website/docs/reference/warehouse-profiles/mssql-profile.md b/website/docs/reference/warehouse-profiles/mssql-profile.md index 7c5ed9865f8..417ec8aa226 100644 --- a/website/docs/reference/warehouse-profiles/mssql-profile.md +++ b/website/docs/reference/warehouse-profiles/mssql-profile.md @@ -40,6 +40,7 @@ type: sqlserver driver: 'ODBC Driver 17 for SQL Server' (The ODBC Driver installed on your system) server: server-host-name or ip port: 1433 +database: database schema: schemaname user: username password: password From 009d5f0782f5a18f33139a1de81d462008ead54c Mon Sep 17 00:00:00 2001 From: sophiad96 Date: Mon, 25 Oct 2021 14:40:09 -0600 Subject: [PATCH 002/130] add clarifying note to example --- website/docs/reference/dbt-jinja-functions/ref.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/website/docs/reference/dbt-jinja-functions/ref.md b/website/docs/reference/dbt-jinja-functions/ref.md index d540fc37742..429b0245937 100644 --- a/website/docs/reference/dbt-jinja-functions/ref.md +++ b/website/docs/reference/dbt-jinja-functions/ref.md @@ -45,6 +45,8 @@ There is also a two-argument variant of the `ref` function. With this variant, y select * from {{ ref('package_name', 'model_name') }} ``` +**Note:** The `package_name` should only include the name of the package, not the maintainer. For example, if using the `fivetran/stripe` package, you'll want to put `stripe` in that argument, rather than `fivetran/stripe`. + ### Forcing Dependencies In normal usage, dbt knows the proper order to run all models based on the usage of the `ref` function. There are cases though where dbt doesn't know when a model should be run. An example of this is when a model only references a macro. In that case, dbt thinks the model can run first because no explicit references are made at compilation time. To address this, you can use a SQL comment along with the `ref` function — dbt will understand the dependency, and the compiled query will still be valid: From 36905530612da28ce75087dfa3544c505f66d680 Mon Sep 17 00:00:00 2001 From: Josh Devlin Date: Thu, 4 Nov 2021 10:24:28 -0500 Subject: [PATCH 003/130] Fix error with Redshift cluster_id in profiles.yml Per [thread in slack](https://getdbt.slack.com/archives/CBSQTAPLG/p1636036555299000) --- website/docs/reference/warehouse-profiles/redshift-profile.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/reference/warehouse-profiles/redshift-profile.md b/website/docs/reference/warehouse-profiles/redshift-profile.md index 9488d57603b..286ca988f17 100644 --- a/website/docs/reference/warehouse-profiles/redshift-profile.md +++ b/website/docs/reference/warehouse-profiles/redshift-profile.md @@ -63,7 +63,7 @@ my-redshift-db: dev: type: redshift method: iam - cluster_id: [cluster_id] + cluster_id: cluster_id host: hostname.region.redshift.amazonaws.com user: alice iam_profile: data_engineer # optional From af86f04f863acc2f7be8bf923b5703b1df181286 Mon Sep 17 00:00:00 2001 From: Jeremy Yeo Date: Tue, 16 Nov 2021 19:45:43 +1300 Subject: [PATCH 004/130] Update cloud-snapshotting-source-freshness.md --- .../using-dbt-cloud/cloud-snapshotting-source-freshness.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/dbt-cloud/using-dbt-cloud/cloud-snapshotting-source-freshness.md b/website/docs/docs/dbt-cloud/using-dbt-cloud/cloud-snapshotting-source-freshness.md index 7f7b407b436..b1670f5b0ab 100644 --- a/website/docs/docs/dbt-cloud/using-dbt-cloud/cloud-snapshotting-source-freshness.md +++ b/website/docs/docs/dbt-cloud/using-dbt-cloud/cloud-snapshotting-source-freshness.md @@ -15,7 +15,7 @@ First, make sure to configure your sources to [snapshot freshness information](u - - **v0.21.0:** Renamed `dbt source snapshot-freshness` to `dbt source freshness`. If using an older version of dbt, the command is `snapshot-freshness`. + - **v0.21.0:** Renamed `dbt source snapshot-freshness` to `dbt source freshness`. If using an older version of dbt, the command is `snapshot-freshness`. Note that while this is the case, you will still need to use the pre-v0.21 syntax of `dbt source snapshot-freshness` if you wish to have dbt Cloud display data source freshness as a rendered user interface as per the screenshot above. From 84d96cfc316027c4f91abc9d29223ba36777e3a0 Mon Sep 17 00:00:00 2001 From: Marcelo Sanches <30713252+BigBangData@users.noreply.github.com> Date: Tue, 30 Nov 2021 13:26:41 -0700 Subject: [PATCH 005/130] Update exposures.md Warn user to use underscores in the name. Note the effect of adding a url. --- website/docs/docs/building-a-dbt-project/exposures.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/docs/docs/building-a-dbt-project/exposures.md b/website/docs/docs/building-a-dbt-project/exposures.md index f81b96b994f..368facdaf1c 100644 --- a/website/docs/docs/building-a-dbt-project/exposures.md +++ b/website/docs/docs/building-a-dbt-project/exposures.md @@ -51,7 +51,7 @@ exposures: ### Available properties _Required:_ -- **name** (must be unique among exposures) +- **name** (must be unique among exposures): use underscores so as to populate the lineage graph - **type**: one of `dashboard`, `notebook`, `analysis`, `ml`, `application` (used to organize in docs site) - **owner**: email @@ -59,7 +59,7 @@ _Expected:_ - **depends_on**: list of refable nodes (`ref` + `source`) _Optional:_ -- **url** +- **url**: will enable the link to "View this exposure" in the documentation - **maturity**: one of `high`, `medium`, `low` - **owner**: name From 8a17b24bf723fd6221ed5c04c79a6c6e32cf3cea Mon Sep 17 00:00:00 2001 From: reidwil <44632147+reidwil@users.noreply.github.com> Date: Mon, 18 Apr 2022 14:56:17 -0400 Subject: [PATCH 006/130] Fix relation typo --- website/docs/reference/dbt-jinja-functions/adapter.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/reference/dbt-jinja-functions/adapter.md b/website/docs/reference/dbt-jinja-functions/adapter.md index d1fc3159824..4261b5a0e73 100644 --- a/website/docs/reference/dbt-jinja-functions/adapter.md +++ b/website/docs/reference/dbt-jinja-functions/adapter.md @@ -75,7 +75,7 @@ Expand the `to_relation` table's column types to match the schema of `from_relat {% set tmp_relation = adapter.get_relation(...) %} {% set target_relation = adapter.get_relation(...) %} -{% do adapter.expand_target_column_types(tmp_realtion, target_relation) %} +{% do adapter.expand_target_column_types(tmp_relation, target_relation) %} ``` From 9112bb738b2fa470e21d5f58117adb735733218a Mon Sep 17 00:00:00 2001 From: Joel Labes Date: Tue, 16 Aug 2022 15:23:33 +1200 Subject: [PATCH 007/130] Document adapter.quote() --- .../reference/dbt-jinja-functions/adapter.md | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/website/docs/reference/dbt-jinja-functions/adapter.md b/website/docs/reference/dbt-jinja-functions/adapter.md index f2cf1b5d5b3..19b568d8534 100644 --- a/website/docs/reference/dbt-jinja-functions/adapter.md +++ b/website/docs/reference/dbt-jinja-functions/adapter.md @@ -18,6 +18,7 @@ The following functions are available: - [adapter.drop_schema](#drop_schema) - [adapter.drop_relation](#drop_relation) - [adapter.rename_relation](#rename_relation) +- [adapter.quote](#quote) ### Deprecated adapter functions @@ -239,6 +240,26 @@ Renames a Relation the database. The `rename_relation` method will rename the s + +## quote +__Args__: + + * `identifier`: A string to quote + +Encloses `identifier` in the correct quotes for the adapter when escaping reserved column names etc. + +**Usage:** + + + +```sql +select + 'abc' as {{ adapter.quote('table_name') }}, + 'def' as {{ adapter.quote('group by') }} +``` + + + ## get_columns_in_table :::danger Deprecated From 11767fff6f97d0cce897bb83ed26b10d5eedd62c Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Tue, 13 Sep 2022 14:21:51 -0400 Subject: [PATCH 008/130] initial component created --- website/src/components/discourse/index.js | 10 ++++++++++ .../src/components/discourse/styles.module.css | 3 +++ website/src/pages/forum.js | 16 ++++++++++++++++ website/src/theme/MDXComponents/index.js | 2 ++ 4 files changed, 31 insertions(+) create mode 100644 website/src/components/discourse/index.js create mode 100644 website/src/components/discourse/styles.module.css create mode 100644 website/src/pages/forum.js diff --git a/website/src/components/discourse/index.js b/website/src/components/discourse/index.js new file mode 100644 index 00000000000..18d0eab6426 --- /dev/null +++ b/website/src/components/discourse/index.js @@ -0,0 +1,10 @@ +import React, { useEffect } from 'react' +import feedStyles from './styles.module.css'; + +export default function DiscourseFeed(styles = {}) { + return ( +
+ Content +
+ ) +} diff --git a/website/src/components/discourse/styles.module.css b/website/src/components/discourse/styles.module.css new file mode 100644 index 00000000000..beb81e36543 --- /dev/null +++ b/website/src/components/discourse/styles.module.css @@ -0,0 +1,3 @@ +.discourseSection { + padding: 4rem 0; +} diff --git a/website/src/pages/forum.js b/website/src/pages/forum.js new file mode 100644 index 00000000000..3f1559c20c9 --- /dev/null +++ b/website/src/pages/forum.js @@ -0,0 +1,16 @@ +import React from 'react'; +import Layout from '@theme/Layout'; +import DiscourseFeed from '@site/src/components/discourse'; + + +function Events() { + return ( + +
+ +
+
+ ); +} + +export default Events; diff --git a/website/src/theme/MDXComponents/index.js b/website/src/theme/MDXComponents/index.js index b45b4892040..e4982bfb146 100644 --- a/website/src/theme/MDXComponents/index.js +++ b/website/src/theme/MDXComponents/index.js @@ -34,6 +34,7 @@ import VersionBlock from '@site/src/components/versionBlock'; import Var from '@site/src/components/variable'; import Term from '@site/src/components/term'; import EventsFeed from '@site/src/components/events'; +import DiscourseFeed from '@site/src/components/discourse'; function unwrapMDXElement(element) { if (element?.props?.mdxType && element?.props?.originalType) { @@ -118,5 +119,6 @@ const MDXComponents = { Var: Var, Term: Term, EventsFeed: EventsFeed, + DiscourseFeed: DiscourseFeed, }; export default MDXComponents; From 975ebc8ddaa1c5b1a3059adddbb1ec76deb6d409 Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Tue, 13 Sep 2022 15:28:22 -0400 Subject: [PATCH 009/130] add title --- website/src/components/discourse/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/website/src/components/discourse/index.js b/website/src/components/discourse/index.js index 18d0eab6426..7ec5e178b78 100644 --- a/website/src/components/discourse/index.js +++ b/website/src/components/discourse/index.js @@ -4,6 +4,7 @@ import feedStyles from './styles.module.css'; export default function DiscourseFeed(styles = {}) { return (
+

dbt Discourse

Content
) From 3fde615b36bf9692f36b2ff559895b91df56b5ae Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Tue, 13 Sep 2022 15:40:36 -0400 Subject: [PATCH 010/130] add netlify function to get discourse posts --- .gitignore | 3 ++ netlify.toml | 2 + website/functions/get-discourse-posts.js | 45 +++++++++++++++++++ website/package-lock.json | 56 ++++++++++++++++++++---- website/package.json | 1 + 5 files changed, 98 insertions(+), 9 deletions(-) create mode 100644 netlify.toml create mode 100644 website/functions/get-discourse-posts.js diff --git a/.gitignore b/.gitignore index 5395ea795d6..49c7bdb5b3e 100755 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,6 @@ website/build/ website/yarn.lock website/node_modules website/i18n/* + +# Local Netlify folder +.netlify diff --git a/netlify.toml b/netlify.toml new file mode 100644 index 00000000000..6ab92757410 --- /dev/null +++ b/netlify.toml @@ -0,0 +1,2 @@ +[build] + functions = "functions" diff --git a/website/functions/get-discourse-posts.js b/website/functions/get-discourse-posts.js new file mode 100644 index 00000000000..53a855456af --- /dev/null +++ b/website/functions/get-discourse-posts.js @@ -0,0 +1,45 @@ +const axios = require('axios') + +async function getDiscoursePosts() { + const { DISCOURSE_API_KEY , DISCOURSE_USER } = process.env + + try { + // Set API endpoint and headers + let discourse_endpoint = `https://discourse.getdbt.com` + let headers = { + 'Accept': 'application/json', + 'Api-Key': DISCOURSE_API_KEY, + 'Api-Username': DISCOURSE_USER, + } + + // Get events from Discourse + let { data } = await axios.get(`${discourse_endpoint}/posts`, { headers }) + console.log('data', data) + if(!data) + throw new Error('Unable to get results from api request.') + + // Return posts + return await returnResponse(200, data) + } catch(err) { + // Log and return the error + console.log('err', err) + return await returnResponse(500, { error: 'Unable to get events from Discourse.'}) + } +} + +async function returnResponse(status, res) { + const headers = { + 'Content-Type': 'application/json', + 'Access-Control-Allow-Origin': '*', + 'Access-Control-Allow-Headers': '*', + 'Access-Control-Allow-Methods': 'GET, OPTIONS' + } + const resObj = { + statusCode: status, + headers, + body: JSON.stringify(res) + } + return resObj +} + +exports.handler = getDiscoursePosts diff --git a/website/package-lock.json b/website/package-lock.json index dd6b3cc84c2..d922ceeb069 100644 --- a/website/package-lock.json +++ b/website/package-lock.json @@ -13,6 +13,7 @@ "@docusaurus/theme-search-algolia": "2.0.0-beta.17", "@mdx-js/react": "^1.6.21", "@svgr/webpack": "^5.5.0", + "axios": "^0.27.2", "classnames": "^2.3.1", "clsx": "^1.1.1", "color": "^3.1.2", @@ -6382,8 +6383,7 @@ "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "node_modules/at-least-node": { "version": "1.0.0", @@ -6463,6 +6463,28 @@ "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", "dev": true }, + "node_modules/axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "dependencies": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "node_modules/axios/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/babel-jest": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", @@ -7870,7 +7892,6 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, "dependencies": { "delayed-stream": "~1.0.0" }, @@ -9171,7 +9192,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, "engines": { "node": ">=0.4.0" } @@ -26955,8 +26975,7 @@ "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "at-least-node": { "version": "1.0.0", @@ -26999,6 +27018,27 @@ "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", "dev": true }, + "axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "requires": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + }, + "dependencies": { + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + } + } + }, "babel-jest": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", @@ -28062,7 +28102,6 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, "requires": { "delayed-stream": "~1.0.0" } @@ -29021,8 +29060,7 @@ "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" }, "delegates": { "version": "1.0.0", diff --git a/website/package.json b/website/package.json index 730839a4107..e3a4d9f66d1 100644 --- a/website/package.json +++ b/website/package.json @@ -12,6 +12,7 @@ "@docusaurus/theme-search-algolia": "2.0.0-beta.17", "@mdx-js/react": "^1.6.21", "@svgr/webpack": "^5.5.0", + "axios": "^0.27.2", "classnames": "^2.3.1", "clsx": "^1.1.1", "color": "^3.1.2", From d3c2e266d3acebe29469694b3fe9bb68576307d7 Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Tue, 13 Sep 2022 16:08:18 -0400 Subject: [PATCH 011/130] add styling with demo content --- website/src/components/discourse/index.js | 81 ++++++++++++++++++- .../components/discourse/styles.module.css | 27 +++++++ 2 files changed, 106 insertions(+), 2 deletions(-) diff --git a/website/src/components/discourse/index.js b/website/src/components/discourse/index.js index 7ec5e178b78..676092fa2f5 100644 --- a/website/src/components/discourse/index.js +++ b/website/src/components/discourse/index.js @@ -5,7 +5,84 @@ export default function DiscourseFeed(styles = {}) { return (

dbt Discourse

- Content -
+ + + + ) } diff --git a/website/src/components/discourse/styles.module.css b/website/src/components/discourse/styles.module.css index beb81e36543..308a0504624 100644 --- a/website/src/components/discourse/styles.module.css +++ b/website/src/components/discourse/styles.module.css @@ -1,3 +1,30 @@ .discourseSection { padding: 4rem 0; } + +.discourseSection .discoursePosts { + margin-bottom: 3rem; +} +.discourseSection .discoursePosts:last-of-type { + margin-bottom: 0; +} +.discourseSection .discoursePosts ul { + list-style: none; + margin: 0; + padding: 0; +} +.discourseSection .discoursePosts ul li { + padding: 1rem 0; + border-bottom: 2px solid var(--color-off-white); +} +.discourseSection .discoursePosts ul li:last-of-type { + border-bottom: none; +} + +.discourseCta { + font-size: 1.1rem; + margin-top: 1rem; +} +.discourseCta:hover { + background: var(--color-light-teal); +} From c75d7439ed2b17d0d77bf9fccf644b5f0d9ec01f Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Tue, 13 Sep 2022 16:35:33 -0400 Subject: [PATCH 012/130] connect page to function --- website/functions/get-discourse-posts.js | 7 +- website/src/components/discourse/index.js | 138 ++++++++---------- .../components/discourse/styles.module.css | 9 ++ 3 files changed, 76 insertions(+), 78 deletions(-) diff --git a/website/functions/get-discourse-posts.js b/website/functions/get-discourse-posts.js index 53a855456af..35b1bf5f447 100644 --- a/website/functions/get-discourse-posts.js +++ b/website/functions/get-discourse-posts.js @@ -14,12 +14,15 @@ async function getDiscoursePosts() { // Get events from Discourse let { data } = await axios.get(`${discourse_endpoint}/posts`, { headers }) - console.log('data', data) + if(!data) throw new Error('Unable to get results from api request.') + // Filter posts by user: "system" + const filteredPosts = data?.latest_posts?.filter(post => post?.username !== 'system') + // Return posts - return await returnResponse(200, data) + return await returnResponse(200, filteredPosts) } catch(err) { // Log and return the error console.log('err', err) diff --git a/website/src/components/discourse/index.js b/website/src/components/discourse/index.js index 676092fa2f5..25417211b35 100644 --- a/website/src/components/discourse/index.js +++ b/website/src/components/discourse/index.js @@ -1,88 +1,74 @@ -import React, { useEffect } from 'react' +import React, { useState, useEffect } from 'react' +import axios from 'axios' import feedStyles from './styles.module.css'; export default function DiscourseFeed(styles = {}) { + const [posts, setPosts] = useState([]) + const [loading, setLoading] = useState(true) + const [isError, setIsError] = useState(false) + useEffect(() => { + const fetchData = async () => { + try { + // Ensure error state is false and loading true + setLoading(true) + setIsError(false) + + // Build Netlify Function endpoint + const endpoint = window?.location?.hostname?.includes('localhost') + ? 'http://localhost:8888/.netlify/functions/get-discourse-posts' + : '/.netlify/functions/get-discourse-posts' + + // Get Discourse posts data + const { data: latest_posts } = await axios.get(endpoint) + + // Set error state if data not available + if(!latest_posts) throw new Error('Unable to get latest posts.') + + // Set 5 latest posts + setPosts(latest_posts.slice(0, 5)) + setLoading(false) + } catch(err) { + setIsError(true) + setLoading(false) + } + } + fetchData() + }, []) return (

dbt Discourse

- -
-

Another fun title

- - See all latest posts + {loading ? ( + Loading + ) : isError || !posts?.length > 0 ? ( +

Unable to load Discourse posts at this time.

+ ) : ( +
    + {posts.map(post => ( +
  • + {post.topic_title} + - by {post.username} +
  • + ))} +
+ )} + + + See all latest posts
) } + +function PostWrapper({ post, children }) { + if(post?.topic_slug) { + return ( + {children} + ) + } else { + return ( +
{children}
+ ) + } +} diff --git a/website/src/components/discourse/styles.module.css b/website/src/components/discourse/styles.module.css index 308a0504624..f27ec5d1ba6 100644 --- a/website/src/components/discourse/styles.module.css +++ b/website/src/components/discourse/styles.module.css @@ -2,6 +2,7 @@ padding: 4rem 0; } +/* Posts */ .discourseSection .discoursePosts { margin-bottom: 3rem; } @@ -21,6 +22,7 @@ border-bottom: none; } +/* Cta */ .discourseCta { font-size: 1.1rem; margin-top: 1rem; @@ -28,3 +30,10 @@ .discourseCta:hover { background: var(--color-light-teal); } + +/* Loading icon */ +.discourseSection .loadingIcon { + max-width: 100px; + display: block; +} + From 5e94f94d6f4e488e7f6653259407b27809aa46df Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Tue, 13 Sep 2022 16:50:13 -0400 Subject: [PATCH 013/130] convert to topics endpoint --- website/functions/get-discourse-posts.js | 11 ++++------- website/src/components/discourse/index.js | 16 ++++++++-------- 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/website/functions/get-discourse-posts.js b/website/functions/get-discourse-posts.js index 35b1bf5f447..c25bd6df0b9 100644 --- a/website/functions/get-discourse-posts.js +++ b/website/functions/get-discourse-posts.js @@ -12,17 +12,14 @@ async function getDiscoursePosts() { 'Api-Username': DISCOURSE_USER, } - // Get events from Discourse - let { data } = await axios.get(`${discourse_endpoint}/posts`, { headers }) + // Get topics from Discourse + let { data: { topic_list } } = await axios.get(`${discourse_endpoint}/latest`, { headers }) - if(!data) + if(!topic_list) throw new Error('Unable to get results from api request.') - // Filter posts by user: "system" - const filteredPosts = data?.latest_posts?.filter(post => post?.username !== 'system') - // Return posts - return await returnResponse(200, filteredPosts) + return await returnResponse(200, topic_list) } catch(err) { // Log and return the error console.log('err', err) diff --git a/website/src/components/discourse/index.js b/website/src/components/discourse/index.js index 25417211b35..20f1bcb799e 100644 --- a/website/src/components/discourse/index.js +++ b/website/src/components/discourse/index.js @@ -18,14 +18,14 @@ export default function DiscourseFeed(styles = {}) { ? 'http://localhost:8888/.netlify/functions/get-discourse-posts' : '/.netlify/functions/get-discourse-posts' - // Get Discourse posts data - const { data: latest_posts } = await axios.get(endpoint) + // Get Discourse topics data + const { data: { topics } } = await axios.get(endpoint) // Set error state if data not available - if(!latest_posts) throw new Error('Unable to get latest posts.') + if(!topics) throw new Error('Unable to get latest topics.') // Set 5 latest posts - setPosts(latest_posts.slice(0, 5)) + setPosts(topics.slice(0, 5)) setLoading(false) } catch(err) { setIsError(true) @@ -47,8 +47,8 @@ export default function DiscourseFeed(styles = {}) {
    {posts.map(post => (
  • - {post.topic_title} - - by {post.username} + {post.title} + {post.username && `- by ${post.username}`}
  • ))}
@@ -62,9 +62,9 @@ export default function DiscourseFeed(styles = {}) { } function PostWrapper({ post, children }) { - if(post?.topic_slug) { + if(post?.slug) { return ( - {children} + {children} ) } else { return ( From d3fb2396fa891e40d2e68ca4344ab9fa877e9dd1 Mon Sep 17 00:00:00 2001 From: "Leona B. Campbell" <3880403+runleonarun@users.noreply.github.com> Date: Tue, 13 Sep 2022 15:29:16 -0700 Subject: [PATCH 014/130] Apply suggestions from code review --- website/docs/reference/warehouse-profiles/redshift-profile.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/reference/warehouse-profiles/redshift-profile.md b/website/docs/reference/warehouse-profiles/redshift-profile.md index 5e6fd96c265..23819381019 100644 --- a/website/docs/reference/warehouse-profiles/redshift-profile.md +++ b/website/docs/reference/warehouse-profiles/redshift-profile.md @@ -62,7 +62,7 @@ my-redshift-db: dev: type: redshift method: iam - cluster_id: cluster_id + cluster_id: CLUSTER_ID host: hostname.region.redshift.amazonaws.com user: alice iam_profile: data_engineer # optional From 4d28b43cdbc6307ce147fe1ec46758e9bf99ccf9 Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Wed, 14 Sep 2022 12:56:28 -0400 Subject: [PATCH 015/130] setup props for discourse component --- website/functions/get-discourse-posts.js | 73 ++++++++++++++++++++++- website/src/components/discourse/index.js | 42 +++++++++++-- website/src/pages/forum.js | 2 +- 3 files changed, 110 insertions(+), 7 deletions(-) diff --git a/website/functions/get-discourse-posts.js b/website/functions/get-discourse-posts.js index c25bd6df0b9..6146c0fc229 100644 --- a/website/functions/get-discourse-posts.js +++ b/website/functions/get-discourse-posts.js @@ -1,6 +1,7 @@ const axios = require('axios') -async function getDiscoursePosts() { +async function getDiscoursePosts({ body }) { + console.log('body', body) const { DISCOURSE_API_KEY , DISCOURSE_USER } = process.env try { @@ -12,6 +13,8 @@ async function getDiscoursePosts() { 'Api-Username': DISCOURSE_USER, } + buildQueryString(body) + // Get topics from Discourse let { data: { topic_list } } = await axios.get(`${discourse_endpoint}/latest`, { headers }) @@ -32,7 +35,7 @@ async function returnResponse(status, res) { 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Headers': '*', - 'Access-Control-Allow-Methods': 'GET, OPTIONS' + 'Access-Control-Allow-Methods': 'POST, OPTIONS' } const resObj = { statusCode: status, @@ -42,4 +45,70 @@ async function returnResponse(status, res) { return resObj } +function buildQueryString(body) { + // const { + // status, + // order, + // after, + // before, + // inString, + // min_posts, + // max_posts, + // min_views, + // max_views, + // tags, + // term, + // category, + // } = body + + if(!body) return null + + // start with empty query string + let query = '' + + // check param and apply to query if set + for(const [key, value] of Object.entries(JSON.parse(body))) { + console.log(`${key}: ${value}`); + + // validate categories + // if valid, add to query string + if(validateItem({ key, value })) { + key === 'category' + ?query += `${value} ` + : query += `${key}:${value} ` + } + } + + console.log('full query', query) +} + +function validateItem({ key, value }) { + // predefined Discourse values + // https://docs.discourse.org/#tag/Search/operation/search + const inStringValues = ['title', 'likes', 'personal', 'messages', 'seen', 'unseen', 'posted', 'created, watching', 'tracking', 'bookmarks', 'assigned', 'unassigned', 'first', 'pinned', 'wiki'] + const orderValues = ['latest', 'likes', 'views', 'latest_topic'] + const statusValues = ['open', 'closed', 'public', 'archived', 'noreplies', 'single_user', 'solved', 'unsolved'] + + // validate keys + if(key === 'category') { + return value.slice(0, 1) === '#' + ? true + : false + } else if(key === 'inString') { + return inStringValues.includes(value) + ? true + : false + } else if(key === 'order') { + return orderValues.includes(value) + ? true + : false + } else if(key === 'status') { + return statusValues.includes(value) + ? true + : false + } else { + return true + } +} + exports.handler = getDiscoursePosts diff --git a/website/src/components/discourse/index.js b/website/src/components/discourse/index.js index 20f1bcb799e..8df63f155cc 100644 --- a/website/src/components/discourse/index.js +++ b/website/src/components/discourse/index.js @@ -2,10 +2,28 @@ import React, { useState, useEffect } from 'react' import axios from 'axios' import feedStyles from './styles.module.css'; -export default function DiscourseFeed(styles = {}) { +export default function DiscourseFeed({ + status = 'unsolved', + order = 'latest_topic', + after = undefined, + before = undefined, + inString = undefined, + min_posts = undefined, + max_posts = undefined, + min_views = undefined, + max_views = undefined, + tags = undefined, + term = undefined, + category = '#help', + title = undefined, + link_text = "See latest topics", + link_href = "https://discourse.getdbt.com/" +}) { + const [posts, setPosts] = useState([]) const [loading, setLoading] = useState(true) const [isError, setIsError] = useState(false) + useEffect(() => { const fetchData = async () => { try { @@ -19,7 +37,20 @@ export default function DiscourseFeed(styles = {}) { : '/.netlify/functions/get-discourse-posts' // Get Discourse topics data - const { data: { topics } } = await axios.get(endpoint) + const { data: { topics } } = await axios.post(endpoint, { + status, + order, + after, + before, + inString, + min_posts, + max_posts, + min_views, + max_views, + tags, + term, + category, + }) // Set error state if data not available if(!topics) throw new Error('Unable to get latest topics.') @@ -34,11 +65,14 @@ export default function DiscourseFeed(styles = {}) { } fetchData() }, []) + return (

dbt Discourse

-

Latest posts

+ {title && ( +

{title}

+ )} {loading ? ( Loading ) : isError || !posts?.length > 0 ? ( @@ -55,7 +89,7 @@ export default function DiscourseFeed(styles = {}) { )} - See all latest posts + {link_text}
) diff --git a/website/src/pages/forum.js b/website/src/pages/forum.js index 3f1559c20c9..b07dfbaaf44 100644 --- a/website/src/pages/forum.js +++ b/website/src/pages/forum.js @@ -7,7 +7,7 @@ function Events() { return (
- +
); From d4910ff200a121d23fbc896bfe769752f064596e Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Thu, 15 Sep 2022 14:27:54 -0400 Subject: [PATCH 016/130] connect component to search discourse endpoint --- package-lock.json | 6 +++ website/functions/get-discourse-posts.js | 47 +++++++++-------------- website/src/components/discourse/index.js | 17 +++++--- website/src/pages/forum.js | 8 ++-- 4 files changed, 40 insertions(+), 38 deletions(-) create mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000000..058db9205e2 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "docs.getdbt.com", + "lockfileVersion": 2, + "requires": true, + "packages": {} +} diff --git a/website/functions/get-discourse-posts.js b/website/functions/get-discourse-posts.js index 6146c0fc229..69cab4796f0 100644 --- a/website/functions/get-discourse-posts.js +++ b/website/functions/get-discourse-posts.js @@ -13,16 +13,19 @@ async function getDiscoursePosts({ body }) { 'Api-Username': DISCOURSE_USER, } - buildQueryString(body) - + const query = buildQueryString(body) + if(!query) throw new Error('Unable to build query string.') + console.log('query ready', query) + + console.log('hitting:', `${discourse_endpoint}/search?q=${query}`) // Get topics from Discourse - let { data: { topic_list } } = await axios.get(`${discourse_endpoint}/latest`, { headers }) + let { data: { topics } } = await axios.get(`${discourse_endpoint}/search?q=${query}`, { headers }) - if(!topic_list) + if(!topics) throw new Error('Unable to get results from api request.') // Return posts - return await returnResponse(200, topic_list) + return await returnResponse(200, topics) } catch(err) { // Log and return the error console.log('err', err) @@ -46,21 +49,6 @@ async function returnResponse(status, res) { } function buildQueryString(body) { - // const { - // status, - // order, - // after, - // before, - // inString, - // min_posts, - // max_posts, - // min_views, - // max_views, - // tags, - // term, - // category, - // } = body - if(!body) return null // start with empty query string @@ -73,13 +61,18 @@ function buildQueryString(body) { // validate categories // if valid, add to query string if(validateItem({ key, value })) { - key === 'category' - ?query += `${value} ` - : query += `${key}:${value} ` + if(key === 'category') { + query += `#${value} ` + } else if(key === 'inString') { + query += `in:${value}` + } else { + query += `${key}:${value} ` + } } } - console.log('full query', query) + if(query) return query + return query } function validateItem({ key, value }) { @@ -90,11 +83,7 @@ function validateItem({ key, value }) { const statusValues = ['open', 'closed', 'public', 'archived', 'noreplies', 'single_user', 'solved', 'unsolved'] // validate keys - if(key === 'category') { - return value.slice(0, 1) === '#' - ? true - : false - } else if(key === 'inString') { + if(key === 'inString') { return inStringValues.includes(value) ? true : false diff --git a/website/src/components/discourse/index.js b/website/src/components/discourse/index.js index 8df63f155cc..d5cb83cc8dc 100644 --- a/website/src/components/discourse/index.js +++ b/website/src/components/discourse/index.js @@ -3,8 +3,8 @@ import axios from 'axios' import feedStyles from './styles.module.css'; export default function DiscourseFeed({ - status = 'unsolved', order = 'latest_topic', + status = undefined, after = undefined, before = undefined, inString = undefined, @@ -14,10 +14,11 @@ export default function DiscourseFeed({ max_views = undefined, tags = undefined, term = undefined, - category = '#help', + category = undefined, title = undefined, link_text = "See latest topics", - link_href = "https://discourse.getdbt.com/" + link_href = "https://discourse.getdbt.com/", + post_count = 5 }) { const [posts, setPosts] = useState([]) @@ -37,7 +38,7 @@ export default function DiscourseFeed({ : '/.netlify/functions/get-discourse-posts' // Get Discourse topics data - const { data: { topics } } = await axios.post(endpoint, { + const { data } = await axios.post(endpoint, { status, order, after, @@ -53,10 +54,10 @@ export default function DiscourseFeed({ }) // Set error state if data not available - if(!topics) throw new Error('Unable to get latest topics.') + if(!data) throw new Error('Unable to get latest topics.') // Set 5 latest posts - setPosts(topics.slice(0, 5)) + setPosts(data.slice(0, post_count)) setLoading(false) } catch(err) { setIsError(true) @@ -64,6 +65,10 @@ export default function DiscourseFeed({ } } fetchData() + + // return () => { + // setPosts([]) + // } }, []) return ( diff --git a/website/src/pages/forum.js b/website/src/pages/forum.js index b07dfbaaf44..eaee0e6c228 100644 --- a/website/src/pages/forum.js +++ b/website/src/pages/forum.js @@ -6,9 +6,11 @@ import DiscourseFeed from '@site/src/components/discourse'; function Events() { return ( -
- -
+
+ + + +
); } From fd0d486e8efc6305e72434a45518fbd843c53405 Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Thu, 15 Sep 2022 14:34:39 -0400 Subject: [PATCH 017/130] adjust styles --- website/src/components/discourse/styles.module.css | 9 +++++++-- website/src/pages/forum.js | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/website/src/components/discourse/styles.module.css b/website/src/components/discourse/styles.module.css index f27ec5d1ba6..a5751ca7e39 100644 --- a/website/src/components/discourse/styles.module.css +++ b/website/src/components/discourse/styles.module.css @@ -5,14 +5,19 @@ /* Posts */ .discourseSection .discoursePosts { margin-bottom: 3rem; + min-height: 414px; + display: flex; + flex-direction: column; + align-items: flex-start; } .discourseSection .discoursePosts:last-of-type { margin-bottom: 0; } .discourseSection .discoursePosts ul { list-style: none; - margin: 0; + margin: 0 0 1rem; padding: 0; + width: 100%; } .discourseSection .discoursePosts ul li { padding: 1rem 0; @@ -25,7 +30,7 @@ /* Cta */ .discourseCta { font-size: 1.1rem; - margin-top: 1rem; + margin-top: auto; } .discourseCta:hover { background: var(--color-light-teal); diff --git a/website/src/pages/forum.js b/website/src/pages/forum.js index eaee0e6c228..351bfb2e674 100644 --- a/website/src/pages/forum.js +++ b/website/src/pages/forum.js @@ -7,7 +7,7 @@ function Events() { return (
- +
From 184893c7652b7ce910022cf24436b2fcb63475c4 Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Thu, 15 Sep 2022 14:50:40 -0400 Subject: [PATCH 018/130] set comments --- website/src/components/discourse/index.js | 18 +++++++++++------- website/src/pages/forum.js | 6 +++--- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/website/src/components/discourse/index.js b/website/src/components/discourse/index.js index d5cb83cc8dc..804141a22e4 100644 --- a/website/src/components/discourse/index.js +++ b/website/src/components/discourse/index.js @@ -65,10 +65,6 @@ export default function DiscourseFeed({ } } fetchData() - - // return () => { - // setPosts([]) - // } }, []) return ( @@ -87,13 +83,21 @@ export default function DiscourseFeed({ {posts.map(post => (
  • {post.title} - {post.username && `- by ${post.username}`} + {/* {post.username && `- by ${post.username}`} */} + {post?.username || post?.posts_count && ( + <> + {' '}- + + {post?.username && `by ${post.username}${post?.posts_count && ','}`} + {' '} + {post?.posts_count && `${post.posts_count} comments`} + + + )}
  • ))} )} - - {link_text} diff --git a/website/src/pages/forum.js b/website/src/pages/forum.js index 351bfb2e674..a9153ff116a 100644 --- a/website/src/pages/forum.js +++ b/website/src/pages/forum.js @@ -7,9 +7,9 @@ function Events() { return (
    - - - + + +
    ); From 7e5e52bdfda31f4c3f90c7bc53ba3fa5707ef176 Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Thu, 15 Sep 2022 14:51:20 -0400 Subject: [PATCH 019/130] adjust section padding --- website/src/components/discourse/styles.module.css | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/website/src/components/discourse/styles.module.css b/website/src/components/discourse/styles.module.css index a5751ca7e39..98b41f933cd 100644 --- a/website/src/components/discourse/styles.module.css +++ b/website/src/components/discourse/styles.module.css @@ -1,5 +1,8 @@ .discourseSection { - padding: 4rem 0; + padding: 4rem 0 0; +} +.discourseSection:last-of-type { + padding-bottom: 4rem; } /* Posts */ From 5fe950fd6897b54c0d32e6ff5b9b98edb1e56264 Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Thu, 15 Sep 2022 15:06:20 -0400 Subject: [PATCH 020/130] encode URI component --- website/functions/get-discourse-posts.js | 7 ++++--- website/src/pages/forum.js | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/website/functions/get-discourse-posts.js b/website/functions/get-discourse-posts.js index 69cab4796f0..80ad219d633 100644 --- a/website/functions/get-discourse-posts.js +++ b/website/functions/get-discourse-posts.js @@ -15,7 +15,6 @@ async function getDiscoursePosts({ body }) { const query = buildQueryString(body) if(!query) throw new Error('Unable to build query string.') - console.log('query ready', query) console.log('hitting:', `${discourse_endpoint}/search?q=${query}`) // Get topics from Discourse @@ -71,8 +70,10 @@ function buildQueryString(body) { } } - if(query) return query - return query + if(query) { + const encodedQuery = encodeURIComponent(query) + return encodedQuery + } } function validateItem({ key, value }) { diff --git a/website/src/pages/forum.js b/website/src/pages/forum.js index a9153ff116a..6c1e5f83864 100644 --- a/website/src/pages/forum.js +++ b/website/src/pages/forum.js @@ -8,8 +8,8 @@ function Events() {
    - - + +
    ); From a9740bda2b0a28fd77729578fdde28d774c51d61 Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Thu, 15 Sep 2022 15:06:28 -0400 Subject: [PATCH 021/130] remove console --- website/functions/get-discourse-posts.js | 1 - 1 file changed, 1 deletion(-) diff --git a/website/functions/get-discourse-posts.js b/website/functions/get-discourse-posts.js index 80ad219d633..c78416b2191 100644 --- a/website/functions/get-discourse-posts.js +++ b/website/functions/get-discourse-posts.js @@ -16,7 +16,6 @@ async function getDiscoursePosts({ body }) { const query = buildQueryString(body) if(!query) throw new Error('Unable to build query string.') - console.log('hitting:', `${discourse_endpoint}/search?q=${query}`) // Get topics from Discourse let { data: { topics } } = await axios.get(`${discourse_endpoint}/search?q=${query}`, { headers }) From c52359ecebe4a54960d3d3dd477b7d06b5b0ed41 Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Thu, 15 Sep 2022 15:18:08 -0400 Subject: [PATCH 022/130] adjust section styles --- website/src/components/discourse/index.js | 63 +++++++++---------- .../components/discourse/styles.module.css | 21 +++---- website/src/css/custom.css | 5 ++ website/src/pages/forum.js | 14 +++-- 4 files changed, 50 insertions(+), 53 deletions(-) diff --git a/website/src/components/discourse/index.js b/website/src/components/discourse/index.js index 804141a22e4..3b800be24b2 100644 --- a/website/src/components/discourse/index.js +++ b/website/src/components/discourse/index.js @@ -68,39 +68,36 @@ export default function DiscourseFeed({ }, []) return ( -
    -

    dbt Discourse

    -
    - {title && ( -

    {title}

    - )} - {loading ? ( - Loading - ) : isError || !posts?.length > 0 ? ( -

    Unable to load Discourse posts at this time.

    - ) : ( -
      - {posts.map(post => ( -
    • - {post.title} - {/* {post.username && `- by ${post.username}`} */} - {post?.username || post?.posts_count && ( - <> - {' '}- - - {post?.username && `by ${post.username}${post?.posts_count && ','}`} - {' '} - {post?.posts_count && `${post.posts_count} comments`} - - - )} -
    • - ))} -
    - )} - {link_text} -
    -
    +
    + {title && ( +

    {title}

    + )} + {loading ? ( + Loading + ) : isError || !posts?.length > 0 ? ( +

    Unable to load Discourse posts at this time.

    + ) : ( +
      + {posts.map(post => ( +
    • + {post.title} + {/* {post.username && `- by ${post.username}`} */} + {post?.username || post?.posts_count && ( + <> + {' '}- + + {post?.username && `by ${post.username}${post?.posts_count && ','}`} + {' '} + {post?.posts_count && `${post.posts_count} comments`} + + + )} +
    • + ))} +
    + )} + {link_text} +
    ) } diff --git a/website/src/components/discourse/styles.module.css b/website/src/components/discourse/styles.module.css index 98b41f933cd..e709b540393 100644 --- a/website/src/components/discourse/styles.module.css +++ b/website/src/components/discourse/styles.module.css @@ -1,32 +1,25 @@ -.discourseSection { - padding: 4rem 0 0; -} -.discourseSection:last-of-type { - padding-bottom: 4rem; -} - -/* Posts */ -.discourseSection .discoursePosts { +/* Posts Section */ +.discoursePosts { margin-bottom: 3rem; min-height: 414px; display: flex; flex-direction: column; align-items: flex-start; } -.discourseSection .discoursePosts:last-of-type { +.discoursePosts:last-of-type { margin-bottom: 0; } -.discourseSection .discoursePosts ul { +.discoursePosts ul { list-style: none; margin: 0 0 1rem; padding: 0; width: 100%; } -.discourseSection .discoursePosts ul li { +.discoursePosts ul li { padding: 1rem 0; border-bottom: 2px solid var(--color-off-white); } -.discourseSection .discoursePosts ul li:last-of-type { +.discoursePosts ul li:last-of-type { border-bottom: none; } @@ -40,7 +33,7 @@ } /* Loading icon */ -.discourseSection .loadingIcon { +.discoursePosts .loadingIcon { max-width: 100px; display: block; } diff --git a/website/src/css/custom.css b/website/src/css/custom.css index f8beee3d66d..7f01dfc40fa 100644 --- a/website/src/css/custom.css +++ b/website/src/css/custom.css @@ -852,3 +852,8 @@ footer #ot-sdk-btn.optanon-show-settings:hover{ color: var(--ifm-footer-color); text-decoration: underline; } + +/* Discourse Forum Page */ +section.discourse-forum-page { + padding: 4rem 0; +} diff --git a/website/src/pages/forum.js b/website/src/pages/forum.js index 6c1e5f83864..b3cecb2d1a1 100644 --- a/website/src/pages/forum.js +++ b/website/src/pages/forum.js @@ -2,15 +2,17 @@ import React from 'react'; import Layout from '@theme/Layout'; import DiscourseFeed from '@site/src/components/discourse'; - function Events() { return ( -
    - - - -
    +
    +
    +

    dbt Discourse

    + + + +
    +
    ); } From 4a918eab2e4cb51f2f5e9aedb06445a882f83b9f Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Thu, 15 Sep 2022 15:31:55 -0400 Subject: [PATCH 023/130] set default minHeight and allow custom styles --- website/docs/docs/introduction.md | 2 ++ website/src/components/discourse/index.js | 5 +++-- website/src/components/discourse/styles.module.css | 1 - 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/website/docs/docs/introduction.md b/website/docs/docs/introduction.md index 73d33aa8e20..c4c3dbe570f 100644 --- a/website/docs/docs/introduction.md +++ b/website/docs/docs/introduction.md @@ -3,6 +3,8 @@ title: "What is dbt?" id: "introduction" --- + + dbt enables analytics engineers to transform data in their warehouses by simply writing select statements. dbt handles turning these select statements into tables and views. dbt does the `T` in (Extract, Load, Transform) processes – it doesn’t extract or load data, but it’s extremely good at transforming data that’s already loaded into your warehouse. diff --git a/website/src/components/discourse/index.js b/website/src/components/discourse/index.js index 3b800be24b2..b338f1fba14 100644 --- a/website/src/components/discourse/index.js +++ b/website/src/components/discourse/index.js @@ -18,7 +18,8 @@ export default function DiscourseFeed({ title = undefined, link_text = "See latest topics", link_href = "https://discourse.getdbt.com/", - post_count = 5 + post_count = 5, + styles = {minHeight: 414} }) { const [posts, setPosts] = useState([]) @@ -68,7 +69,7 @@ export default function DiscourseFeed({ }, []) return ( -
    +
    {title && (

    {title}

    )} diff --git a/website/src/components/discourse/styles.module.css b/website/src/components/discourse/styles.module.css index e709b540393..13896a08748 100644 --- a/website/src/components/discourse/styles.module.css +++ b/website/src/components/discourse/styles.module.css @@ -1,7 +1,6 @@ /* Posts Section */ .discoursePosts { margin-bottom: 3rem; - min-height: 414px; display: flex; flex-direction: column; align-items: flex-start; From ae7c02149acd04ac6ac6eec8309b67028a2fbb71 Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Thu, 15 Sep 2022 15:40:01 -0400 Subject: [PATCH 024/130] spread styles --- website/docs/docs/introduction.md | 2 -- website/docs/faqs/Jinja/which-jinja-docs.md | 3 +++ website/functions/get-discourse-posts.js | 3 --- website/src/components/discourse/index.js | 6 +++--- 4 files changed, 6 insertions(+), 8 deletions(-) diff --git a/website/docs/docs/introduction.md b/website/docs/docs/introduction.md index c4c3dbe570f..73d33aa8e20 100644 --- a/website/docs/docs/introduction.md +++ b/website/docs/docs/introduction.md @@ -3,8 +3,6 @@ title: "What is dbt?" id: "introduction" --- - - dbt enables analytics engineers to transform data in their warehouses by simply writing select statements. dbt handles turning these select statements into tables and views. dbt does the `T` in (Extract, Load, Transform) processes – it doesn’t extract or load data, but it’s extremely good at transforming data that’s already loaded into your warehouse. diff --git a/website/docs/faqs/Jinja/which-jinja-docs.md b/website/docs/faqs/Jinja/which-jinja-docs.md index 5272509e8b4..a79126aa90b 100644 --- a/website/docs/faqs/Jinja/which-jinja-docs.md +++ b/website/docs/faqs/Jinja/which-jinja-docs.md @@ -10,3 +10,6 @@ If you are stuck with a Jinja issue, it can get confusing where to check for mor 1. [Jinja's Template Designer Docs](https://jinja.palletsprojects.com/page/templates/): This is the best reference for most of the Jinja you'll use 2. [Our Jinja function reference](/docs/building-a-dbt-project/jinja-macros#related-reference-docs): This documents any additional functionality we've added to Jinja in dbt. 3. [Agate's table docs](https://agate.readthedocs.io/page/api/table.html): If you're operating on the result of a query, dbt will pass it back to you as an agate table. This means that the methods you call on the belong to the Agate library rather than Jinja or dbt. + + + diff --git a/website/functions/get-discourse-posts.js b/website/functions/get-discourse-posts.js index c78416b2191..ee663d6ccf7 100644 --- a/website/functions/get-discourse-posts.js +++ b/website/functions/get-discourse-posts.js @@ -1,7 +1,6 @@ const axios = require('axios') async function getDiscoursePosts({ body }) { - console.log('body', body) const { DISCOURSE_API_KEY , DISCOURSE_USER } = process.env try { @@ -54,8 +53,6 @@ function buildQueryString(body) { // check param and apply to query if set for(const [key, value] of Object.entries(JSON.parse(body))) { - console.log(`${key}: ${value}`); - // validate categories // if valid, add to query string if(validateItem({ key, value })) { diff --git a/website/src/components/discourse/index.js b/website/src/components/discourse/index.js index b338f1fba14..d32e45f757c 100644 --- a/website/src/components/discourse/index.js +++ b/website/src/components/discourse/index.js @@ -19,7 +19,7 @@ export default function DiscourseFeed({ link_text = "See latest topics", link_href = "https://discourse.getdbt.com/", post_count = 5, - styles = {minHeight: 414} + styles = {} }) { const [posts, setPosts] = useState([]) @@ -69,12 +69,12 @@ export default function DiscourseFeed({ }, []) return ( -
    +
    {title && (

    {title}

    )} {loading ? ( - Loading + Loading ) : isError || !posts?.length > 0 ? (

    Unable to load Discourse posts at this time.

    ) : ( From cfe856d1aaf0a8be705ca0222e48ec8a85dac55e Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Thu, 15 Sep 2022 16:23:28 -0400 Subject: [PATCH 025/130] set initial min-height --- website/src/components/discourse/index.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/website/src/components/discourse/index.js b/website/src/components/discourse/index.js index d32e45f757c..43b3c74fbdc 100644 --- a/website/src/components/discourse/index.js +++ b/website/src/components/discourse/index.js @@ -68,8 +68,15 @@ export default function DiscourseFeed({ fetchData() }, []) + // Set initial min-height + // This is to avoid layout shifts + // which affects Lighthouse performance scores + const setMinHeight = isError + ? 'auto' + : 414 + return ( -
    +
    {title && (

    {title}

    )} From 2d9b2427494339bda65b78db15d329dfac857870 Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Fri, 16 Sep 2022 09:19:31 -0400 Subject: [PATCH 026/130] add default top margin --- website/docs/faqs/Jinja/which-jinja-docs.md | 2 +- website/src/components/discourse/styles.module.css | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/website/docs/faqs/Jinja/which-jinja-docs.md b/website/docs/faqs/Jinja/which-jinja-docs.md index a79126aa90b..4be30c70fd7 100644 --- a/website/docs/faqs/Jinja/which-jinja-docs.md +++ b/website/docs/faqs/Jinja/which-jinja-docs.md @@ -12,4 +12,4 @@ If you are stuck with a Jinja issue, it can get confusing where to check for mor 3. [Agate's table docs](https://agate.readthedocs.io/page/api/table.html): If you're operating on the result of a query, dbt will pass it back to you as an agate table. This means that the methods you call on the belong to the Agate library rather than Jinja or dbt. - + diff --git a/website/src/components/discourse/styles.module.css b/website/src/components/discourse/styles.module.css index 13896a08748..013bbd3f291 100644 --- a/website/src/components/discourse/styles.module.css +++ b/website/src/components/discourse/styles.module.css @@ -1,6 +1,6 @@ /* Posts Section */ .discoursePosts { - margin-bottom: 3rem; + margin: 2rem 0 3rem; display: flex; flex-direction: column; align-items: flex-start; From 6e48623db24c768e8e157df4c0a622e3f6be4acc Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Fri, 16 Sep 2022 09:20:14 -0400 Subject: [PATCH 027/130] Update website/functions/get-discourse-posts.js Co-authored-by: Joel Labes --- website/functions/get-discourse-posts.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/functions/get-discourse-posts.js b/website/functions/get-discourse-posts.js index ee663d6ccf7..83857e3ae4e 100644 --- a/website/functions/get-discourse-posts.js +++ b/website/functions/get-discourse-posts.js @@ -26,7 +26,7 @@ async function getDiscoursePosts({ body }) { } catch(err) { // Log and return the error console.log('err', err) - return await returnResponse(500, { error: 'Unable to get events from Discourse.'}) + return await returnResponse(500, { error: 'Unable to get topics from Discourse.'}) } } From e90c9f4970e65a8987fbb55703e376c1f5e6d9f1 Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Fri, 16 Sep 2022 09:21:05 -0400 Subject: [PATCH 028/130] Update website/functions/get-discourse-posts.js Co-authored-by: Joel Labes --- website/functions/get-discourse-posts.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/functions/get-discourse-posts.js b/website/functions/get-discourse-posts.js index 83857e3ae4e..844e6b907a5 100644 --- a/website/functions/get-discourse-posts.js +++ b/website/functions/get-discourse-posts.js @@ -75,7 +75,7 @@ function buildQueryString(body) { function validateItem({ key, value }) { // predefined Discourse values // https://docs.discourse.org/#tag/Search/operation/search - const inStringValues = ['title', 'likes', 'personal', 'messages', 'seen', 'unseen', 'posted', 'created, watching', 'tracking', 'bookmarks', 'assigned', 'unassigned', 'first', 'pinned', 'wiki'] + const inStringValues = ['title', 'likes', 'personal', 'messages', 'seen', 'unseen', 'posted', 'created', 'watching', 'tracking', 'bookmarks', 'assigned', 'unassigned', 'first', 'pinned', 'wiki'] const orderValues = ['latest', 'likes', 'views', 'latest_topic'] const statusValues = ['open', 'closed', 'public', 'archived', 'noreplies', 'single_user', 'solved', 'unsolved'] From cd254d70ef33d5eb07eb9fce5a15d7dae6a2ebe2 Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Fri, 16 Sep 2022 09:24:29 -0400 Subject: [PATCH 029/130] Update website/src/components/discourse/index.js Co-authored-by: Joel Labes --- website/src/components/discourse/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/src/components/discourse/index.js b/website/src/components/discourse/index.js index 43b3c74fbdc..3c24f320485 100644 --- a/website/src/components/discourse/index.js +++ b/website/src/components/discourse/index.js @@ -83,7 +83,7 @@ export default function DiscourseFeed({ {loading ? ( Loading ) : isError || !posts?.length > 0 ? ( -

    Unable to load Discourse posts at this time.

    +

    Unable to load forum posts at this time.

    ) : (
      {posts.map(post => ( From 8ef9f408c17b9b799e931c51e834c026d935ddc3 Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Fri, 16 Sep 2022 09:39:29 -0400 Subject: [PATCH 030/130] set default cta link and add ability to hide cta --- website/docs/faqs/Jinja/which-jinja-docs.md | 2 +- website/src/components/discourse/index.js | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/website/docs/faqs/Jinja/which-jinja-docs.md b/website/docs/faqs/Jinja/which-jinja-docs.md index 4be30c70fd7..6ae6c519528 100644 --- a/website/docs/faqs/Jinja/which-jinja-docs.md +++ b/website/docs/faqs/Jinja/which-jinja-docs.md @@ -12,4 +12,4 @@ If you are stuck with a Jinja issue, it can get confusing where to check for mor 3. [Agate's table docs](https://agate.readthedocs.io/page/api/table.html): If you're operating on the result of a query, dbt will pass it back to you as an agate table. This means that the methods you call on the belong to the Agate library rather than Jinja or dbt. - + diff --git a/website/src/components/discourse/index.js b/website/src/components/discourse/index.js index 43b3c74fbdc..a4454d7ee59 100644 --- a/website/src/components/discourse/index.js +++ b/website/src/components/discourse/index.js @@ -16,8 +16,9 @@ export default function DiscourseFeed({ term = undefined, category = undefined, title = undefined, - link_text = "See latest topics", - link_href = "https://discourse.getdbt.com/", + link_text = "Ask the Community", + link_href = `https://discourse.getdbt.com/new-topic${category ? `?category=${category}` : ''}${tags ? (!category ? `?tags=${tags}` : `&tags=${tags}`) : ''}`, + hide_cta = false, post_count = 5, styles = {} }) { @@ -104,7 +105,9 @@ export default function DiscourseFeed({ ))}
    )} - {link_text} + {!hide_cta && ( + {link_text} + )}
    ) } From df3854734008dd27028bb8462999a54fa6224597 Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Fri, 16 Sep 2022 09:50:46 -0400 Subject: [PATCH 031/130] add checkbox for solved posts --- website/src/components/discourse/index.js | 5 +++++ website/src/components/discourse/styles.module.css | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/website/src/components/discourse/index.js b/website/src/components/discourse/index.js index a4454d7ee59..614c7a95cbf 100644 --- a/website/src/components/discourse/index.js +++ b/website/src/components/discourse/index.js @@ -76,6 +76,8 @@ export default function DiscourseFeed({ ? 'auto' : 414 + console.log('posts', posts) + return (
    {title && ( @@ -89,6 +91,9 @@ export default function DiscourseFeed({
      {posts.map(post => (
    • + {post?.has_accepted_answer && ( + + )} {post.title} {/* {post.username && `- by ${post.username}`} */} {post?.username || post?.posts_count && ( diff --git a/website/src/components/discourse/styles.module.css b/website/src/components/discourse/styles.module.css index 013bbd3f291..d77802d99df 100644 --- a/website/src/components/discourse/styles.module.css +++ b/website/src/components/discourse/styles.module.css @@ -8,6 +8,12 @@ .discoursePosts:last-of-type { margin-bottom: 0; } +.discoursePosts .solvedPost { + font-size: .8rem; +} +.discoursePosts .solvedPost:hover { + cursor: default; +} .discoursePosts ul { list-style: none; margin: 0 0 1rem; From dc375c73768fc80dea2ce5a978e71e22a219fa00 Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Fri, 16 Sep 2022 10:37:54 -0400 Subject: [PATCH 032/130] set relative after date for help and discussions categories --- website/src/components/discourse/index.js | 24 +++++++++++++++++++++-- website/src/pages/forum.js | 4 ++-- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/website/src/components/discourse/index.js b/website/src/components/discourse/index.js index 614c7a95cbf..fc71d3dbcd4 100644 --- a/website/src/components/discourse/index.js +++ b/website/src/components/discourse/index.js @@ -28,6 +28,7 @@ export default function DiscourseFeed({ const [isError, setIsError] = useState(false) useEffect(() => { + // Get topics from Discourse API const fetchData = async () => { try { // Ensure error state is false and loading true @@ -39,11 +40,26 @@ export default function DiscourseFeed({ ? 'http://localhost:8888/.netlify/functions/get-discourse-posts' : '/.netlify/functions/get-discourse-posts' + // If 'after' prop not passed in, set relative + // after date for 'help' & 'discussions' categories + let afterDate = after + if(!afterDate) { + // Today's date + let today = new Date(); + if(category === 'help') { + const relativeDate = new Date(today.setDate(today.getDate() - 30)); + afterDate = formatDate(relativeDate) + } else if(category === 'discussions') { + const relativeDate = new Date(today.setDate(today.getDate() - 90)); + afterDate = formatDate(relativeDate) + } + } + // Get Discourse topics data const { data } = await axios.post(endpoint, { status, order, - after, + after: afterDate, before, inString, min_posts, @@ -90,7 +106,7 @@ export default function DiscourseFeed({ ) : (
        {posts.map(post => ( -
      • +
      • {post?.has_accepted_answer && ( )} @@ -128,3 +144,7 @@ function PostWrapper({ post, children }) { ) } } + +function formatDate(date) { + return `${date.getFullYear()}-${('0'+ (date.getMonth()+1)).slice(-2)}-${('0'+ date.getDate()).slice(-2)}` +} diff --git a/website/src/pages/forum.js b/website/src/pages/forum.js index b3cecb2d1a1..b500cfeb62e 100644 --- a/website/src/pages/forum.js +++ b/website/src/pages/forum.js @@ -8,9 +8,9 @@ function Events() {

        dbt Discourse

        - + - +
        From 919366c57d330f28c9d81080ad79c2fc5ad01389 Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Fri, 16 Sep 2022 10:45:09 -0400 Subject: [PATCH 033/130] set default status and category --- website/src/components/discourse/index.js | 4 ++-- website/src/pages/forum.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/website/src/components/discourse/index.js b/website/src/components/discourse/index.js index 0dadf3fbbd3..f95766b2479 100644 --- a/website/src/components/discourse/index.js +++ b/website/src/components/discourse/index.js @@ -4,7 +4,7 @@ import feedStyles from './styles.module.css'; export default function DiscourseFeed({ order = 'latest_topic', - status = undefined, + status = 'solved', after = undefined, before = undefined, inString = undefined, @@ -14,7 +14,7 @@ export default function DiscourseFeed({ max_views = undefined, tags = undefined, term = undefined, - category = undefined, + category = 'help', title = undefined, link_text = "Ask the Community", link_href = `https://discourse.getdbt.com/new-topic${category ? `?category=${category}` : ''}${tags ? (!category ? `?tags=${tags}` : `&tags=${tags}`) : ''}`, diff --git a/website/src/pages/forum.js b/website/src/pages/forum.js index b500cfeb62e..51cf6d5d53a 100644 --- a/website/src/pages/forum.js +++ b/website/src/pages/forum.js @@ -9,8 +9,8 @@ function Events() {

        dbt Discourse

        - - + +
        From 0a28c251cac29c4daf20da0a2507eb4721c878fa Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Fri, 16 Sep 2022 10:45:30 -0400 Subject: [PATCH 034/130] remove console --- website/src/components/discourse/index.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/website/src/components/discourse/index.js b/website/src/components/discourse/index.js index f95766b2479..9d5dbc810ce 100644 --- a/website/src/components/discourse/index.js +++ b/website/src/components/discourse/index.js @@ -92,8 +92,6 @@ export default function DiscourseFeed({ ? 'auto' : 414 - console.log('posts', posts) - return (
        {title && ( From 2590c0049fcdd15eb0005f10cd4c625f799d2528 Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Fri, 16 Sep 2022 11:13:54 -0400 Subject: [PATCH 035/130] support array for status property --- website/docs/faqs/Jinja/which-jinja-docs.md | 2 +- website/functions/get-discourse-posts.js | 18 +++++++++++++++--- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/website/docs/faqs/Jinja/which-jinja-docs.md b/website/docs/faqs/Jinja/which-jinja-docs.md index 6ae6c519528..6c42bfb5962 100644 --- a/website/docs/faqs/Jinja/which-jinja-docs.md +++ b/website/docs/faqs/Jinja/which-jinja-docs.md @@ -12,4 +12,4 @@ If you are stuck with a Jinja issue, it can get confusing where to check for mor 3. [Agate's table docs](https://agate.readthedocs.io/page/api/table.html): If you're operating on the result of a query, dbt will pass it back to you as an agate table. This means that the methods you call on the belong to the Agate library rather than Jinja or dbt. - + diff --git a/website/functions/get-discourse-posts.js b/website/functions/get-discourse-posts.js index 844e6b907a5..52fb966a6db 100644 --- a/website/functions/get-discourse-posts.js +++ b/website/functions/get-discourse-posts.js @@ -60,6 +60,10 @@ function buildQueryString(body) { query += `#${value} ` } else if(key === 'inString') { query += `in:${value}` + } else if(key === 'status' && Array.isArray(value)) { + value?.map(item => { + query += `${key}:${item} ` + }) } else { query += `${key}:${value} ` } @@ -89,9 +93,17 @@ function validateItem({ key, value }) { ? true : false } else if(key === 'status') { - return statusValues.includes(value) - ? true - : false + if(Array.isArray(value)) { + let isValid = true + value?.map(item => { + if(!statusValues.includes(item)) isValid = false + }) + return isValid + } else { + return statusValues.includes(value) + ? true + : false + } } else { return true } From 983662f29c9138e5d4a323c26019edf2bb38038c Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Fri, 16 Sep 2022 12:05:27 -0400 Subject: [PATCH 036/130] get topic author --- website/functions/get-discourse-posts.js | 17 ++++++++++++++--- website/src/components/discourse/index.js | 2 +- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/website/functions/get-discourse-posts.js b/website/functions/get-discourse-posts.js index 52fb966a6db..af4a241b92c 100644 --- a/website/functions/get-discourse-posts.js +++ b/website/functions/get-discourse-posts.js @@ -16,13 +16,24 @@ async function getDiscoursePosts({ body }) { if(!query) throw new Error('Unable to build query string.') // Get topics from Discourse - let { data: { topics } } = await axios.get(`${discourse_endpoint}/search?q=${query}`, { headers }) + let { data: { posts, topics } } = await axios.get(`${discourse_endpoint}/search?q=${query}`, { headers }) - if(!topics) + if(!topics || topics?.length <= 0) throw new Error('Unable to get results from api request.') + // Set author for topics if not querying by specific term + let allTopics = topics + if(!body?.term) { + allTopics = topics.reduce((topicsArr, topic) => { + const firstTopicPost = posts?.find(post => post?.post_number === 1 && post?.topic_id === topic?.id) + firstTopicPost && (topic.author = firstTopicPost.username) + topicsArr.push(topic) + return topicsArr + }, []) + } + // Return posts - return await returnResponse(200, topics) + return await returnResponse(200, allTopics) } catch(err) { // Log and return the error console.log('err', err) diff --git a/website/src/components/discourse/index.js b/website/src/components/discourse/index.js index 9d5dbc810ce..3eed8b5891d 100644 --- a/website/src/components/discourse/index.js +++ b/website/src/components/discourse/index.js @@ -114,7 +114,7 @@ export default function DiscourseFeed({ <> {' '}- - {post?.username && `by ${post.username}${post?.posts_count && ','}`} + {post?.author && `by ${post.author}${post?.posts_count && ','}`} {' '} {post?.posts_count && `${post.posts_count} comments`} From b0feb215a1502737e496d4328d29ff045ca72592 Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Fri, 16 Sep 2022 12:11:00 -0400 Subject: [PATCH 037/130] change 'post' to 'topic' throughout component and endpoint --- ...ourse-posts.js => get-discourse-topics.js} | 6 +-- website/src/components/discourse/index.js | 42 +++++++++---------- .../components/discourse/styles.module.css | 18 ++++---- 3 files changed, 33 insertions(+), 33 deletions(-) rename website/functions/{get-discourse-posts.js => get-discourse-topics.js} (97%) diff --git a/website/functions/get-discourse-posts.js b/website/functions/get-discourse-topics.js similarity index 97% rename from website/functions/get-discourse-posts.js rename to website/functions/get-discourse-topics.js index af4a241b92c..04eb90c6fdb 100644 --- a/website/functions/get-discourse-posts.js +++ b/website/functions/get-discourse-topics.js @@ -1,6 +1,6 @@ const axios = require('axios') -async function getDiscoursePosts({ body }) { +async function getDiscourseTopics({ body }) { const { DISCOURSE_API_KEY , DISCOURSE_USER } = process.env try { @@ -32,7 +32,7 @@ async function getDiscoursePosts({ body }) { }, []) } - // Return posts + // Return topics return await returnResponse(200, allTopics) } catch(err) { // Log and return the error @@ -120,4 +120,4 @@ function validateItem({ key, value }) { } } -exports.handler = getDiscoursePosts +exports.handler = getDiscourseTopics diff --git a/website/src/components/discourse/index.js b/website/src/components/discourse/index.js index 3eed8b5891d..ec97d31e9eb 100644 --- a/website/src/components/discourse/index.js +++ b/website/src/components/discourse/index.js @@ -19,11 +19,11 @@ export default function DiscourseFeed({ link_text = "Ask the Community", link_href = `https://discourse.getdbt.com/new-topic${category ? `?category=${category}` : ''}${tags ? (!category ? `?tags=${tags}` : `&tags=${tags}`) : ''}`, hide_cta = false, - post_count = 5, + topic_count = 5, styles = {} }) { - const [posts, setPosts] = useState([]) + const [topics, setTopics] = useState([]) const [loading, setLoading] = useState(true) const [isError, setIsError] = useState(false) @@ -37,8 +37,8 @@ export default function DiscourseFeed({ // Build Netlify Function endpoint const endpoint = window?.location?.hostname?.includes('localhost') - ? 'http://localhost:8888/.netlify/functions/get-discourse-posts' - : '/.netlify/functions/get-discourse-posts' + ? 'http://localhost:8888/.netlify/functions/get-discourse-topics' + : '/.netlify/functions/get-discourse-topics' // If 'after' prop not passed in, set relative // after date for 'help' & 'discussions' categories @@ -74,8 +74,8 @@ export default function DiscourseFeed({ // Set error state if data not available if(!data) throw new Error('Unable to get latest topics.') - // Set 5 latest posts - setPosts(data.slice(0, post_count)) + // Set 5 latest toics + setTopics(data.slice(0, topic_count)) setLoading(false) } catch(err) { setIsError(true) @@ -93,30 +93,30 @@ export default function DiscourseFeed({ : 414 return ( -
        +
        {title && (

        {title}

        )} {loading ? ( Loading - ) : isError || !posts?.length > 0 ? ( -

        Unable to load forum posts at this time.

        + ) : isError || !topics?.length > 0 ? ( +

        Unable to load forum topics at this time.

        ) : (
          - {posts.map(post => ( -
        • - {post?.has_accepted_answer && ( - + {topics.map(topic => ( +
        • + {topic?.has_accepted_answer && ( + )} - {post.title} - {/* {post.username && `- by ${post.username}`} */} - {post?.username || post?.posts_count && ( + {topic.title} + {/* {topic.username && `- by ${topic.username}`} */} + {topic?.username || topic?.posts_count && ( <> {' '}- - {post?.author && `by ${post.author}${post?.posts_count && ','}`} + {topic?.author && `by ${topic.author}${topic?.posts_count && ','}`} {' '} - {post?.posts_count && `${post.posts_count} comments`} + {topic?.posts_count && `${topic.posts_count} comments`} )} @@ -131,10 +131,10 @@ export default function DiscourseFeed({ ) } -function PostWrapper({ post, children }) { - if(post?.slug) { +function TopicWrapper({ topic, children }) { + if(topic?.slug) { return ( - {children} + {children} ) } else { return ( diff --git a/website/src/components/discourse/styles.module.css b/website/src/components/discourse/styles.module.css index d77802d99df..125251a9e95 100644 --- a/website/src/components/discourse/styles.module.css +++ b/website/src/components/discourse/styles.module.css @@ -1,30 +1,30 @@ -/* Posts Section */ -.discoursePosts { +/* Topics Section */ +.discourseTopics { margin: 2rem 0 3rem; display: flex; flex-direction: column; align-items: flex-start; } -.discoursePosts:last-of-type { +.discourseTopics:last-of-type { margin-bottom: 0; } -.discoursePosts .solvedPost { +.discourseTopics .solvedTopic { font-size: .8rem; } -.discoursePosts .solvedPost:hover { +.discourseTopics .solvedTopic:hover { cursor: default; } -.discoursePosts ul { +.discourseTopics ul { list-style: none; margin: 0 0 1rem; padding: 0; width: 100%; } -.discoursePosts ul li { +.discourseTopics ul li { padding: 1rem 0; border-bottom: 2px solid var(--color-off-white); } -.discoursePosts ul li:last-of-type { +.discourseTopics ul li:last-of-type { border-bottom: none; } @@ -38,7 +38,7 @@ } /* Loading icon */ -.discoursePosts .loadingIcon { +.discourseTopics .loadingIcon { max-width: 100px; display: block; } From eca179ca65c9d7c97289e5ed2316bb354569ee6e Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Fri, 16 Sep 2022 12:25:18 -0400 Subject: [PATCH 038/130] display author next to post link --- website/src/components/discourse/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/src/components/discourse/index.js b/website/src/components/discourse/index.js index ec97d31e9eb..1546d946517 100644 --- a/website/src/components/discourse/index.js +++ b/website/src/components/discourse/index.js @@ -92,6 +92,7 @@ export default function DiscourseFeed({ ? 'auto' : 414 + console.log('topics', topics) return (
          {title && ( @@ -109,8 +110,7 @@ export default function DiscourseFeed({ )} {topic.title} - {/* {topic.username && `- by ${topic.username}`} */} - {topic?.username || topic?.posts_count && ( + {(topic?.author || topic?.posts_count) && ( <> {' '}- From 25c89f6f53cb7a02e4b6c223822a591161ed812c Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Fri, 16 Sep 2022 13:51:21 -0400 Subject: [PATCH 039/130] adds meta fields --- website/src/pages/forum.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/website/src/pages/forum.js b/website/src/pages/forum.js index 51cf6d5d53a..909ab4bf275 100644 --- a/website/src/pages/forum.js +++ b/website/src/pages/forum.js @@ -1,10 +1,15 @@ import React from 'react'; import Layout from '@theme/Layout'; +import Head from '@docusaurus/Head'; import DiscourseFeed from '@site/src/components/discourse'; function Events() { return ( + + dbt Discourse + +

          dbt Discourse

          From 5901f61b1e7a537bdb2406c3275915ad49e3b5cd Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Fri, 16 Sep 2022 14:05:03 -0400 Subject: [PATCH 040/130] change comments to replies and adjust for correct reply count --- website/src/components/discourse/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/src/components/discourse/index.js b/website/src/components/discourse/index.js index 1546d946517..31ac6c9eb18 100644 --- a/website/src/components/discourse/index.js +++ b/website/src/components/discourse/index.js @@ -116,7 +116,7 @@ export default function DiscourseFeed({ {topic?.author && `by ${topic.author}${topic?.posts_count && ','}`} {' '} - {topic?.posts_count && `${topic.posts_count} comments`} + {topic?.posts_count && `${topic.posts_count - 1} ${(topic.posts_count - 1) === 1 ? 'reply' : 'replies'}`} )} From ab9382498ee2b359e7f7b3ea9a56d751bacbc36b Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Fri, 16 Sep 2022 14:06:59 -0400 Subject: [PATCH 041/130] remove console --- website/src/components/discourse/index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/website/src/components/discourse/index.js b/website/src/components/discourse/index.js index 31ac6c9eb18..9789fb4a920 100644 --- a/website/src/components/discourse/index.js +++ b/website/src/components/discourse/index.js @@ -92,7 +92,6 @@ export default function DiscourseFeed({ ? 'auto' : 414 - console.log('topics', topics) return (
          {title && ( From ae94e4b7822ec7fe90983b79c6d9af28166764b6 Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Mon, 19 Sep 2022 15:06:59 -0400 Subject: [PATCH 042/130] update top nav - in progress --- website/docusaurus.config.js | 69 ++++++++++++++---------------------- 1 file changed, 27 insertions(+), 42 deletions(-) diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js index 490bc974cdd..74f4984a8b1 100644 --- a/website/docusaurus.config.js +++ b/website/docusaurus.config.js @@ -110,31 +110,7 @@ var siteSettings = { activeBasePath: 'reference' }, { - to: '/dbt-cli/cli-overview', - label: 'dbt CLI', - position: 'left', - activeBasePath: 'dbt-cli' - }, - { - to: '/docs/dbt-cloud/cloud-overview', - label: 'dbt Cloud', - position: 'left', - activeBasePath: 'docs/dbt-cloud' - }, - { - to: '/guides/getting-started', - label: 'Guides', - position: 'left', - activeBasePath: 'guides' - }, - { - to: '/blog/', - label: 'Developer Blog', - position: 'right', - activeBasePath: 'blog' - }, - { - label: 'Courses', + label: 'Learn', position: 'right', items: [ { @@ -144,30 +120,39 @@ var siteSettings = { { label: 'Live courses', href: 'https://learn.getdbt.com/public', - } - ], - }, - { - label: 'Community', - position: 'right', - items: [ - { - label: 'Maintaining a Slack Channel', - to: '/community/maintaining-a-channel', }, { - label: 'dbt Slack', - href: 'https://community.getdbt.com/', + label: 'Guides', + to: '/guides/getting-started', }, { - label: 'Blog', - href: 'https://blog.getdbt.com', + label: 'Developer Blog', + to: '/blog', }, { - label: 'GitHub', - href: 'https://github.com/dbt-labs/dbt-core', + label: 'Glossary', + to: '/glossary', }, - ] + // { + // label: 'Forum', + // to: '/forum', + // }, + ], + }, + // { + // label: 'Community', + // position: 'right', + // items: [ + // { + // label: 'Maintaining a Slack Channel', + // to: '/community/maintaining-a-channel', + // }, + // ] + // }, + { + label: 'Create a Free Account', + to: 'https://www.getdbt.com/signup/', + position: 'right', }, ], }, From a3772e61f47cfdfc0b3b6e8744e06c2410ff5cae Mon Sep 17 00:00:00 2001 From: Anders Swanson Date: Mon, 19 Sep 2022 16:25:00 -0400 Subject: [PATCH 043/130] one big table v1 --- website/docs/docs/supported-data-platforms.md | 125 +++++++++--------- 1 file changed, 60 insertions(+), 65 deletions(-) diff --git a/website/docs/docs/supported-data-platforms.md b/website/docs/docs/supported-data-platforms.md index 0280216773b..5b91e7f9f3d 100644 --- a/website/docs/docs/supported-data-platforms.md +++ b/website/docs/docs/supported-data-platforms.md @@ -3,74 +3,23 @@ title: "Supported Data Platforms" id: "supported-data-platforms" --- -dbt connects to and runs SQL against your database, warehouse, platform, or query engine. It works by using a dedicated **adapter** for each technology. All the adapters listed below are open source and free to use, just like dbt. +dbt connects to and runs SQL against your database, warehouse, platform, or query engine. It works by using a dedicated [**adapter**](contributing/adapter-development/1-what-are-adapters) for each technology. All the adapters listed below are open source and free to use, just like dbt. -If you have a new adapter, please add it to this list using a pull request! See [Documenting your adapter](5-documenting-a-new-adapter) for more information. +If you have a new adapter, please add it to this list using a pull request! See [Documenting your adapter](5-documenting-a-new-adapter) for more information. +## Background ### Installation -Most adapters can be installed from PyPi using `pip`. The installation will include `dbt-core` and any other required dependencies, which may include other adapter plugins. Read more about [installing dbt](dbt-cli/install/overview). - -Some vendor or community adapters may not exist in PyPi. However, you can still install an adapter hosted on GitHub with `pip install`, by replacing MAINTAINER_NAME with the person or company maintaining the adapter on GitHub and ADAPTER_NAME with the git repository's name (these can be taken directly from the adapter's url): - -```shell -pip install git+https://github.com/MAINTAINER_NAME/ADAPTER_NAME.git -``` - -### dbt Labs Supported - -In addition to maintaining `dbt-core`, [dbt Labs](https://github.com/dbt-labs) maintains a set of adapters for some of the most common databases, warehouses, and platforms. (✅ indicates "full support.") - -| Adapter for | Documentation | Core features | dbt Cloud | Install from PyPi | -| ------------ | ------------- | ------------- | --------- | ----------------- | -| Postgres | [Profile Setup](postgres-profile) | ✅ | ✅ | `pip install dbt-postgres` | -| Redshift | [Profile Setup](redshift-profile), [Configuration](redshift-configs) | ✅ | ✅ | `pip install dbt-redshift` | -| BigQuery | [Profile Setup](bigquery-profile), [Configuration](bigquery-configs) | ✅ | ✅ | `pip install dbt-bigquery` | -| Snowflake | [Profile Setup](snowflake-profile), [Configuration](snowflake-configs) | ✅ | ✅ | `pip install dbt-snowflake` | -| Apache Spark | [Profile Setup](spark-profile), [Configuration](spark-configs) | ✅ | ✅ | `pip install dbt-spark[PyHive]` | - -### Vendor Supported - -These adapter plugins are built and maintained by the same people who build and maintain the complementary data technology. - - -| Adapter for | Documentation | Install from PyPi | -|---------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------| ----------------- | -| AlloyDB (via [dbt-postgres](https://github.com/dbt-labs/dbt-postgres)) | [Profile Setup](alloydb-profile) | `pip install dbt-postgres` | -| ClickHouse ([dbt-clickhouse](https://github.com/ClickHouse/dbt-clickhouse)) | [Profile Setup](clickhouse-profile), [Configuration](clickhouse-configs) | `pip install dbt-clickhouse` | -| Databricks ([dbt-databricks](https://github.com/databricks/dbt-databricks)) | [Profile Setup](databricks-profile), [Configuration](spark-configs#databricks-configurations) | `pip install dbt-databricks` | -| Firebolt ([dbt-firebolt](https://github.com/firebolt-db/dbt-firebolt)) | [Profile Setup](firebolt-profile), [Configuration](firebolt-configs) | `pip install dbt-firebolt` | -| Hive ([dbt-hive](https://github.com/cloudera/dbt-hive)) | [Profile Setup](hive-profile), [Configuration](hive-configs) | `pip install dbt-hive` | -| Impala ([dbt-impala](https://github.com/cloudera/dbt-impala)) | [Profile Setup](impala-profile), [Configuration](impala-configs) | `pip install dbt-impala` | -| iomete ([dbt-iomete](https://github.com/iomete/dbt-iomete)) | [Profile Setup](iomete-profile) | `pip install dbt-iomete` | -| Layer Bigquery ([dbt-layer](https://github.com/layerai/dbt-layer)) | [Profile Setup](layer-profile) | `pip install dbt-layer-bigquery` | -| Materialize ([dbt-materialize](https://github.com/MaterializeInc/materialize/blob/main/misc/dbt-materialize)) | [Profile Setup](materialize-profile), [Configuration](materialize-configs) | `pip install dbt-materialize` | -| MindsDB ([dbt-mindsdb](https://github.com/mindsdb/dbt-mindsdb)) | [Profile Setup](mindsdb-profile), [Configuration](mindsdb-configs) | `pip install dbt-mindsdb` | -| Oracle ([dbt-oracle](https://github.com/oracle/dbt-oracle)) | [Profile Setup](oracle-profile) | `pip install dbt-oracle` | -| Rockset ([dbt-rockset](https://github.com/rockset/dbt-rockset)) | [Profile Setup](rockset-profile) | `pip install dbt-rockset` | -| SingleStore ([dbt-singlestore](https://github.com/memsql/dbt-singlestore)) | [Profile Setup](singlestore-profile) | `pip install dbt-singlestore` | -| Starburst & Trino ([dbt-trino](https://github.com/starburstdata/dbt-trino)) | [Profile Setup](trino-profile) | `pip install dbt-trino` | -| Teradata ([dbt-teradata](https://github.com/teradata/dbt-teradata)) | [Profile Setup](teradata-profile), [Configuration](teradata-configs) | `pip install dbt-teradata` | -| TiDB ([dbt-tidb](https://github.com/pingcap/dbt-tidb)) | [Profile Setup](tidb-profile) | `pip install dbt-tidb` | - -### Community Supported - -These adapter plugins are contributed and maintained by members of the community 🌱 - -| Adapter for | Documentation | Notes | Install with pip | -|------------------------|------------------------------------------------------------------------------|---------------------------|------------------------------| -| SQL Server & Azure SQL | [Profile Setup](mssql-profile), [Configuration](mssql-configs) | SQL Server 2016 and later | `pip install dbt-sqlserver` | -| Azure Synapse | [Profile Setup](azuresynapse-profile), [Configuration](azuresynapse-configs) | Azure Synapse 10+ | `pip install dbt-synapse` | -| Exasol Analytics | [Profile Setup](exasol-profile) | Exasol 6.x and later | `pip install dbt-exasol` | -| Dremio | [Profile Setup](dremio-profile) | Dremio 4.7+ | `pip install dbt-dremio` | -| Athena | [Profile Setup](athena-profile) | Athena engine version 2 | `pip install dbt-athena-adapter` | -| Vertica | [Profile Setup](vertica-profile) | Vertica 10.0+ | `pip install dbt-vertica` | -| AWS Glue | [Profile Setup](glue-profile), [Configuration](glue-configs) | Glue 2.0+ | `pip install dbt-glue` | -| Greenplum | [Profile Setup](greenplum-profile), [Configuration](greenplum-configs) | Greenplum 6.0+ | `pip install dbt-greenplum` | -| DuckDB | [Profile Setup](duckdb-profile) | DuckDB 0.3.2 | `pip install dbt-duckdb` | -| SQLite | [Profile Setup](sqlite-profile) | SQlite Version 3.0+ | `pip install dbt-sqlite` | -| MySQL | [Profile Setup](mysql-profile) | MySQL 5.7 and 8.0 | `pip install dbt-mysql` | -| IBM DB2 | [Profile Setup](ibmdb2-profile) | IBM DB2 V9fp2+ | `pip install dbt-ibmdb2` | +With two exceptions [^1], all adapters below can be installed from PyPI using `pip install `. The installation will include `dbt-core` and any other required dependencies, which may include other adapter plugins. Read more about [installing dbt](dbt-cli/install/overview). + +### Types of Adapaters + +| Supported by | Description | +| ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| dbt Labs | [dbt Labs](https://github.com/dbt-labs) maintains a set of adapters for some of the most common databases, warehouses, and platforms. (✅ indicates "full support.") | +| Partner | These adapter plugins are built and maintained by the same people who build and maintain the complementary data technology | +| Community | These adapter plugins are contributed and maintained by members of the community 🌱 | + Community-supported plugins are works in progress, and anyone is welcome to contribute by testing and writing code. If you're interested in contributing: - Join both the dedicated #adapter-ecosystem channel in [dbt Slack](https://community.getdbt.com/) and the channel for your adapter's data store (e.g. #db-sqlserver, #db-athena) @@ -78,6 +27,52 @@ Community-supported plugins are works in progress, and anyone is welcome to cont Note that, while no community plugins are currently supported in dbt Cloud, we expect this to change in the near future. -## Creating a new adapter +### Creating a new adapter dbt can be extended to any SQL-speaking database, warehouse, data lake, query engine, or analytical platform by means of an _adapter plugin_. These plugins can be built as separate Python modules, and dbt will discover them if they are installed on your system. If you see something missing from the lists above, and you're interested in developing an integration, read more about [building a new adapter](/docs/contributing/adapter-development/3-building-a-new-adapter). + +## Supported Data Platforms + +| Data Platform | Adapter Repository | Verified? (latest verified version) | Core feature tier | Cloud support | Maintained By | Profile Setup | Configuration | `pip install ...` | Slack Channel | Notes | +| ---------------------- | ----------------------------------------------------------------------------------------------- | ------------------------------------------- | ------------------ | ------------------ | ------------- | ------------------------------------------ | ------------------------------------------------------------ | -------------------- | ------------------------------------------------------------------------- | ------------------------- | +| AlloyDB | [dbt-postgres](https://github.com/dbt-labs/dbt-postgres) | :white_check_mark: (same as `dbt-postgres`) | :white_check_mark: | :white_check_mark: | | [AlloyDB Profile](alloydb-profile) | | `dbt-postgres` | [#db-postgres](https://getdbt.slack.com/archives/C0172G2E273) | | +| BigQuery | [dbt-bigquery](https://github.com/dbt-labs/dbt-bigquery) | :white_check_mark: (1.2) | :white_check_mark: | :white_check_mark: | dbt Labs | [BigQuery Profile](bigquery-profile) | [BigQuery Configs](bigquery-configs) | `dbt-bigquery` | [#db-bigquery](https://getdbt.slack.com/archives/C99SNSRTK) | | +| Databricks | [dbt-databricks](https://github.com/databricks/dbt-databricks) | :construction: (1.2) | :white_check_mark: | | Databricks | [Databricks Profile](databricks-profile) | [Databricks Configs](spark-configs#databricks-configuration) | `dbt-databricks` | [#db-databricks-and-spark](https://getdbt.slack.com/archives/C01DRQ178LQ) | | +| Postgres | [dbt-postgres](https://github.com/dbt-labs/dbt-postgres) | :white_check_mark: (1.2) | :white_check_mark: | :white_check_mark: | dbt Labs | [Postgres Profile](postgres-profile) | | `dbt-postgres` | [#db-postgres](https://getdbt.slack.com/archives/C0172G2E273) | | +| Redshift | [dbt-redshift](https://github.com/dbt-labs/dbt-redshift) | :white_check_mark: (1.2) | :white_check_mark: | :white_check_mark: | dbt Labs | [Redshift Profile](redshift-profile) | [Redshift Configs](redshift-configs) | `dbt-redshift` | [#db-redshift](https://getdbt.slack.com/archives/C01DRQ178LQ) | | +| Snowflake | [dbt-snowflake](https://github.com/dbt-labs/dbt-snowflake) | :white_check_mark: (1.2) | :white_check_mark: | :white_check_mark: | dbt Labs | [Snowflake Profile](snowflake-profile) | [Snowflake Configs](snowflake-configs) | `dbt-snowflake` | [#db-snowflake](https://getdbt.slack.com/archives/C01DRQ178LQ) | | +| Apache Spark | [dbt-spark](https://github.com/dbt-labs/dbt-spark) | :white_check_mark: (1.2) | :white_check_mark: | :white_check_mark: | dbt Labs | [Spark Profile](spark-profile) | [Spark Configs](spark-configs) | `dbt-spark[PyHive]` | [#db-databricks-and-spark](https://getdbt.slack.com/archives/C01DRQ178LQ) | | +| Starburst & Trino | [dbt-trino](https://github.com/starburstdata/dbt-trino) | :construction: (1.2) | :white_check_mark: | | Starburst | [Trino Profile](trino-profile) | | `dbt-trino` | [#db-presto-trino](https://getdbt.slack.com/archives/C013MLFR7BQ) | | +| IBM DB2 | [dbt-ibmdb2](https://github.com/aurany/dbt-ibmdb2) | | | | Community | [DB2 Profile](ibmdb2-profile) | | `dbt-ibmdb2` | n/a | IBM DB2 V9fp2+ | +| ClickHouse | [dbt-clickhouse](https://github.com/ClickHouse/dbt-clickhouse) | | | | Clickhouse | [Clickhouse Profile](clickhouse-profile) | [Clickhouse Configs](clickhouse-configs) | `dbt-clickhouse` | [#db-redshift](https://getdbt.slack.com/archives/C01DRQ178LQ) | | +| Exasol Analytics | [dbt-exasol](https://github.com/tglunde/dbt-exasol) | | | | Community | [Exasol Profile](exasol-profile) | | `dbt-exasol` | n/a | Exasol 6.x and later | +| Firebolt | [dbt-firebolt](https://github.com/firebolt-db/dbt-firebolt) | | :warning: | | Firebolt | [Firebolt Profile](firebolt-profile) | [Firebolt Configs](firebolt-configs) | `dbt-firebolt` | [#db-firebolt](https://getdbt.slack.com/archives/C02PYT5CXN0) | | +| AWS Glue | [dbt-glue](https://github.com/aws-samples/dbt-glue) | | | | AWS | [Glue Profile](glue-profile) | [Glue Configs](glue-configs) | `dbt-glue` | [#db-glue](https://getdbt.slack.com/archives/C02R4HSMBAT) | Glue 2.0+ | +| Hive | [dbt-hive](https://github.com/cloudera/dbt-hive) | | | | Cloudera | [Hive Profile](hive-profile) | [Hive Configs](hive-configs) | `dbt-hive` | [#db-hive](https://getdbt.slack.com/archives/C0401DTNSKW) | | +| Impala | [dbt-impala](https://github.com/cloudera/dbt-impala) | | | | Cloudera | [Impala Profile](impala-profile) | [Impala Configs](impala-configs) | `dbt-impala` | [#db-impala](https://getdbt.slack.com/archives/C03K2PTHHTP) | | +| iomete | [dbt-iomete](https://github.com/iomete/dbt-iomete) | | | | Iomete | [iomete Profile](iomete-profile) | | `dbt-iomete` | [#db-iomete](https://getdbt.slack.com/archives/C03JFG22EP9) | | +| Layer Bigquery | [dbt-layer](https://github.com/layerai/dbt-layer) | | | | Layer AI | [Layer Profile](layer-profile) | | `dbt-layer-bigquery` | [#tools-layer](https://getdbt.slack.com/archives/C03STA39TFE) | | +| Materialize | [dbt-materialize](https://github.com/MaterializeInc/materialize/blob/main/misc/dbt-materialize) | | :warning: | | Materialize | [Materialize Profile](materialize-profile) | [Materialize Configs](materialize-configs) | `dbt-materialize` | [#db-materialize](https://getdbt.slack.com/archives/C01PWAH41A5) | | +| MindsDB | [dbt-mindsdb](https://github.com/mindsdb/dbt-mindsdb) | | | | MindsDB | [MindsDB Profile](mindsdb-profile) | [MindsDB Configs](mindsdb-configs) | `dbt-mindsdb` | n/a | | +| MySQL | [dbt-mysql](https://github.com/dbeatty10/dbt-mysql) | | | | Community | [MySQL Profile](mysql-profile) | | `dbt-mysql` | [#db-mysql-family](https://getdbt.slack.com/archives/C03BK0SHC64) | MySQL 5.7 and 8.0 | +| Oracle | [dbt-oracle](https://github.com/oracle/dbt-oracle) | | | | Oracle | [Oracle Profile](oracle-profile) | | `dbt-oracle` | [#db-oracle](https://getdbt.slack.com/archives/C01PWH4TXLY) | | +| Rockset | [dbt-rockset](https://github.com/rockset/dbt-rockset) | | :warning: | | Rockset | [Rockset Profile](rockset-profile) | | `dbt-rockset` | [#db-rockset](https://getdbt.slack.com/archives/C02J7AZUAMN) | | +| SingleStore | [dbt-singlestore](https://github.com/memsql/dbt-singlestore) | | | | Single Store | [SingleStore Profile](singlestore-profile) | | `dbt-singlestore` | [#db-singlestore](https://getdbt.slack.com/archives/C02V2QHFF7U) | | +| Teradata | [dbt-teradata](https://github.com/teradata/dbt-teradata) | | | | Teradata | [Teradata Profile](teradata-profile) | [Teradata Configs](teradata-configs) | `dbt-teradata` | [#db-teradata](https://getdbt.slack.com/archives/C027B6BHMT3) | | +| TiDB | [dbt-tidb](https://github.com/pingcap/dbt-tidb) | | | | PingCAP | [TiDB Profile](tidb-profile) | | `dbt-tidb` | [#db-tidb](https://getdbt.slack.com/archives/C03CC86R1NY) | | +| SQL Server & Azure SQL | [dbt-sqlserver](https://github.com/dbt-msft/dbt-sqlserver/) | | | | Community | [SQL Server Profile](mssql-profile) | [SQL Server Configs](mssql-configs) | `dbt-sqlserver` | [#db-sqlserver](https://getdbt.slack.com/archives/CMRMDDQ9W) | SQL Server 2016 and later | +| Azure Synapse | [dbt-synapse](https://github.com/dbt-msft/dbt-synapse) | | | | Community | [Synapse Profile](azuresynapse-profile) | [Synapse Configs](azuresynapse-configs) | `dbt-synapse` | [#db-synapse](https://getdbt.slack.com/archives/C01DRQ178LQ) | Azure Synapse 10+ | +| Dremio | [dbt-dremio](https://github.com/fabrice-etanchaud/dbt-dremio/) | | | | Community | [Dremio Profile](dremio-profile) | | `dbt-dremio` | n/a | Dremio 4.7+ | +| Athena | [dbt-athena](https://github.com/Tomme/dbt-athena) | | | | Community | [Athena Profile](athena-profile) | | `dbt-athena-adapter` | [#db-athena](https://getdbt.slack.com/archives/C013MLFR7BQ) | Athena engine version 2 | +| Vertica | [dbt-vertica](https://github.com/ahedengren/dbt-vertica) | | | | Community | [Vertica Profile](vertica-profile) | | `dbt-vertica` | n/a | Vertica 10.0+ | +| Greenplum | [dbt-greenplum](https://github.com/markporoshin/dbt-greenplum) | | | | Community | [Greenplum Profile](greenplum-profile) | [Greenplum Configs](greenplum-configs) | `dbt-greenplum` | n/a | Greenplum 6.0+ | +| DuckDB | [dbt-duckdb](https://github.com/jwills/dbt-duckdb/) | | | | Community | [DuckDB Profile](duckdb-profile) | | `dbt-duckdb` | [#db-duckdb](https://getdbt.slack.com/archives/C039D1J1LA2) | DuckDB 0.3.2 | +| SQLite | [dbt-sqlite](https://github.com/codeforkjeff/dbt-sqlite) | | | | Community | [SQLite Profile](sqlite-profile) | | `dbt-sqlite` | n/a | SQlite Version 3.0+ | + + +[^1]: Here are the two different adapters. Use the PyPI package name when installing with `pip` + + | Adapter repo name | PyPI package name | + | ----------------- | -------------------- | + | `dbt-athena` | `dbt-athena-adapter` | + | `dbt-layer` | `dbt-layer-bigquery` | From 046042b0e273631730ec1bce685f7a3eaeaab91b Mon Sep 17 00:00:00 2001 From: Anders Swanson Date: Mon, 19 Sep 2022 16:28:40 -0400 Subject: [PATCH 044/130] drop install column --- website/docs/docs/supported-data-platforms.md | 70 +++++++++---------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/website/docs/docs/supported-data-platforms.md b/website/docs/docs/supported-data-platforms.md index 5b91e7f9f3d..0ca65b821d2 100644 --- a/website/docs/docs/supported-data-platforms.md +++ b/website/docs/docs/supported-data-platforms.md @@ -33,41 +33,41 @@ dbt can be extended to any SQL-speaking database, warehouse, data lake, query en ## Supported Data Platforms -| Data Platform | Adapter Repository | Verified? (latest verified version) | Core feature tier | Cloud support | Maintained By | Profile Setup | Configuration | `pip install ...` | Slack Channel | Notes | -| ---------------------- | ----------------------------------------------------------------------------------------------- | ------------------------------------------- | ------------------ | ------------------ | ------------- | ------------------------------------------ | ------------------------------------------------------------ | -------------------- | ------------------------------------------------------------------------- | ------------------------- | -| AlloyDB | [dbt-postgres](https://github.com/dbt-labs/dbt-postgres) | :white_check_mark: (same as `dbt-postgres`) | :white_check_mark: | :white_check_mark: | | [AlloyDB Profile](alloydb-profile) | | `dbt-postgres` | [#db-postgres](https://getdbt.slack.com/archives/C0172G2E273) | | -| BigQuery | [dbt-bigquery](https://github.com/dbt-labs/dbt-bigquery) | :white_check_mark: (1.2) | :white_check_mark: | :white_check_mark: | dbt Labs | [BigQuery Profile](bigquery-profile) | [BigQuery Configs](bigquery-configs) | `dbt-bigquery` | [#db-bigquery](https://getdbt.slack.com/archives/C99SNSRTK) | | -| Databricks | [dbt-databricks](https://github.com/databricks/dbt-databricks) | :construction: (1.2) | :white_check_mark: | | Databricks | [Databricks Profile](databricks-profile) | [Databricks Configs](spark-configs#databricks-configuration) | `dbt-databricks` | [#db-databricks-and-spark](https://getdbt.slack.com/archives/C01DRQ178LQ) | | -| Postgres | [dbt-postgres](https://github.com/dbt-labs/dbt-postgres) | :white_check_mark: (1.2) | :white_check_mark: | :white_check_mark: | dbt Labs | [Postgres Profile](postgres-profile) | | `dbt-postgres` | [#db-postgres](https://getdbt.slack.com/archives/C0172G2E273) | | -| Redshift | [dbt-redshift](https://github.com/dbt-labs/dbt-redshift) | :white_check_mark: (1.2) | :white_check_mark: | :white_check_mark: | dbt Labs | [Redshift Profile](redshift-profile) | [Redshift Configs](redshift-configs) | `dbt-redshift` | [#db-redshift](https://getdbt.slack.com/archives/C01DRQ178LQ) | | -| Snowflake | [dbt-snowflake](https://github.com/dbt-labs/dbt-snowflake) | :white_check_mark: (1.2) | :white_check_mark: | :white_check_mark: | dbt Labs | [Snowflake Profile](snowflake-profile) | [Snowflake Configs](snowflake-configs) | `dbt-snowflake` | [#db-snowflake](https://getdbt.slack.com/archives/C01DRQ178LQ) | | -| Apache Spark | [dbt-spark](https://github.com/dbt-labs/dbt-spark) | :white_check_mark: (1.2) | :white_check_mark: | :white_check_mark: | dbt Labs | [Spark Profile](spark-profile) | [Spark Configs](spark-configs) | `dbt-spark[PyHive]` | [#db-databricks-and-spark](https://getdbt.slack.com/archives/C01DRQ178LQ) | | -| Starburst & Trino | [dbt-trino](https://github.com/starburstdata/dbt-trino) | :construction: (1.2) | :white_check_mark: | | Starburst | [Trino Profile](trino-profile) | | `dbt-trino` | [#db-presto-trino](https://getdbt.slack.com/archives/C013MLFR7BQ) | | -| IBM DB2 | [dbt-ibmdb2](https://github.com/aurany/dbt-ibmdb2) | | | | Community | [DB2 Profile](ibmdb2-profile) | | `dbt-ibmdb2` | n/a | IBM DB2 V9fp2+ | -| ClickHouse | [dbt-clickhouse](https://github.com/ClickHouse/dbt-clickhouse) | | | | Clickhouse | [Clickhouse Profile](clickhouse-profile) | [Clickhouse Configs](clickhouse-configs) | `dbt-clickhouse` | [#db-redshift](https://getdbt.slack.com/archives/C01DRQ178LQ) | | -| Exasol Analytics | [dbt-exasol](https://github.com/tglunde/dbt-exasol) | | | | Community | [Exasol Profile](exasol-profile) | | `dbt-exasol` | n/a | Exasol 6.x and later | -| Firebolt | [dbt-firebolt](https://github.com/firebolt-db/dbt-firebolt) | | :warning: | | Firebolt | [Firebolt Profile](firebolt-profile) | [Firebolt Configs](firebolt-configs) | `dbt-firebolt` | [#db-firebolt](https://getdbt.slack.com/archives/C02PYT5CXN0) | | -| AWS Glue | [dbt-glue](https://github.com/aws-samples/dbt-glue) | | | | AWS | [Glue Profile](glue-profile) | [Glue Configs](glue-configs) | `dbt-glue` | [#db-glue](https://getdbt.slack.com/archives/C02R4HSMBAT) | Glue 2.0+ | -| Hive | [dbt-hive](https://github.com/cloudera/dbt-hive) | | | | Cloudera | [Hive Profile](hive-profile) | [Hive Configs](hive-configs) | `dbt-hive` | [#db-hive](https://getdbt.slack.com/archives/C0401DTNSKW) | | -| Impala | [dbt-impala](https://github.com/cloudera/dbt-impala) | | | | Cloudera | [Impala Profile](impala-profile) | [Impala Configs](impala-configs) | `dbt-impala` | [#db-impala](https://getdbt.slack.com/archives/C03K2PTHHTP) | | -| iomete | [dbt-iomete](https://github.com/iomete/dbt-iomete) | | | | Iomete | [iomete Profile](iomete-profile) | | `dbt-iomete` | [#db-iomete](https://getdbt.slack.com/archives/C03JFG22EP9) | | -| Layer Bigquery | [dbt-layer](https://github.com/layerai/dbt-layer) | | | | Layer AI | [Layer Profile](layer-profile) | | `dbt-layer-bigquery` | [#tools-layer](https://getdbt.slack.com/archives/C03STA39TFE) | | -| Materialize | [dbt-materialize](https://github.com/MaterializeInc/materialize/blob/main/misc/dbt-materialize) | | :warning: | | Materialize | [Materialize Profile](materialize-profile) | [Materialize Configs](materialize-configs) | `dbt-materialize` | [#db-materialize](https://getdbt.slack.com/archives/C01PWAH41A5) | | -| MindsDB | [dbt-mindsdb](https://github.com/mindsdb/dbt-mindsdb) | | | | MindsDB | [MindsDB Profile](mindsdb-profile) | [MindsDB Configs](mindsdb-configs) | `dbt-mindsdb` | n/a | | -| MySQL | [dbt-mysql](https://github.com/dbeatty10/dbt-mysql) | | | | Community | [MySQL Profile](mysql-profile) | | `dbt-mysql` | [#db-mysql-family](https://getdbt.slack.com/archives/C03BK0SHC64) | MySQL 5.7 and 8.0 | -| Oracle | [dbt-oracle](https://github.com/oracle/dbt-oracle) | | | | Oracle | [Oracle Profile](oracle-profile) | | `dbt-oracle` | [#db-oracle](https://getdbt.slack.com/archives/C01PWH4TXLY) | | -| Rockset | [dbt-rockset](https://github.com/rockset/dbt-rockset) | | :warning: | | Rockset | [Rockset Profile](rockset-profile) | | `dbt-rockset` | [#db-rockset](https://getdbt.slack.com/archives/C02J7AZUAMN) | | -| SingleStore | [dbt-singlestore](https://github.com/memsql/dbt-singlestore) | | | | Single Store | [SingleStore Profile](singlestore-profile) | | `dbt-singlestore` | [#db-singlestore](https://getdbt.slack.com/archives/C02V2QHFF7U) | | -| Teradata | [dbt-teradata](https://github.com/teradata/dbt-teradata) | | | | Teradata | [Teradata Profile](teradata-profile) | [Teradata Configs](teradata-configs) | `dbt-teradata` | [#db-teradata](https://getdbt.slack.com/archives/C027B6BHMT3) | | -| TiDB | [dbt-tidb](https://github.com/pingcap/dbt-tidb) | | | | PingCAP | [TiDB Profile](tidb-profile) | | `dbt-tidb` | [#db-tidb](https://getdbt.slack.com/archives/C03CC86R1NY) | | -| SQL Server & Azure SQL | [dbt-sqlserver](https://github.com/dbt-msft/dbt-sqlserver/) | | | | Community | [SQL Server Profile](mssql-profile) | [SQL Server Configs](mssql-configs) | `dbt-sqlserver` | [#db-sqlserver](https://getdbt.slack.com/archives/CMRMDDQ9W) | SQL Server 2016 and later | -| Azure Synapse | [dbt-synapse](https://github.com/dbt-msft/dbt-synapse) | | | | Community | [Synapse Profile](azuresynapse-profile) | [Synapse Configs](azuresynapse-configs) | `dbt-synapse` | [#db-synapse](https://getdbt.slack.com/archives/C01DRQ178LQ) | Azure Synapse 10+ | -| Dremio | [dbt-dremio](https://github.com/fabrice-etanchaud/dbt-dremio/) | | | | Community | [Dremio Profile](dremio-profile) | | `dbt-dremio` | n/a | Dremio 4.7+ | -| Athena | [dbt-athena](https://github.com/Tomme/dbt-athena) | | | | Community | [Athena Profile](athena-profile) | | `dbt-athena-adapter` | [#db-athena](https://getdbt.slack.com/archives/C013MLFR7BQ) | Athena engine version 2 | -| Vertica | [dbt-vertica](https://github.com/ahedengren/dbt-vertica) | | | | Community | [Vertica Profile](vertica-profile) | | `dbt-vertica` | n/a | Vertica 10.0+ | -| Greenplum | [dbt-greenplum](https://github.com/markporoshin/dbt-greenplum) | | | | Community | [Greenplum Profile](greenplum-profile) | [Greenplum Configs](greenplum-configs) | `dbt-greenplum` | n/a | Greenplum 6.0+ | -| DuckDB | [dbt-duckdb](https://github.com/jwills/dbt-duckdb/) | | | | Community | [DuckDB Profile](duckdb-profile) | | `dbt-duckdb` | [#db-duckdb](https://getdbt.slack.com/archives/C039D1J1LA2) | DuckDB 0.3.2 | -| SQLite | [dbt-sqlite](https://github.com/codeforkjeff/dbt-sqlite) | | | | Community | [SQLite Profile](sqlite-profile) | | `dbt-sqlite` | n/a | SQlite Version 3.0+ | +| Data Platform | Adapter Repository | Verified? (latest verified version) | Core feature tier | Cloud support | Maintained By | Profile Setup | Configuration | Slack Channel | Notes | +| ---------------------- | ----------------------------------------------------------------------------------------------- | ------------------------------------------- | ------------------ | ------------------ | ------------- | ------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------------------- | ------------------------- | +| AlloyDB | [dbt-postgres](https://github.com/dbt-labs/dbt-postgres) | :white_check_mark: (same as `dbt-postgres`) | :white_check_mark: | :white_check_mark: | | [AlloyDB Profile](alloydb-profile) | | [#db-postgres](https://getdbt.slack.com/archives/C0172G2E273) | | +| BigQuery | [dbt-bigquery](https://github.com/dbt-labs/dbt-bigquery) | :white_check_mark: (1.2) | :white_check_mark: | :white_check_mark: | dbt Labs | [BigQuery Profile](bigquery-profile) | [BigQuery Configs](bigquery-configs) | [#db-bigquery](https://getdbt.slack.com/archives/C99SNSRTK) | | +| Databricks | [dbt-databricks](https://github.com/databricks/dbt-databricks) | :construction: (1.2) | :white_check_mark: | | Databricks | [Databricks Profile](databricks-profile) | [Databricks Configs](spark-configs#databricks-configuration) | [#db-databricks-and-spark](https://getdbt.slack.com/archives/C01DRQ178LQ) | | +| Postgres | [dbt-postgres](https://github.com/dbt-labs/dbt-postgres) | :white_check_mark: (1.2) | :white_check_mark: | :white_check_mark: | dbt Labs | [Postgres Profile](postgres-profile) | | [#db-postgres](https://getdbt.slack.com/archives/C0172G2E273) | | +| Redshift | [dbt-redshift](https://github.com/dbt-labs/dbt-redshift) | :white_check_mark: (1.2) | :white_check_mark: | :white_check_mark: | dbt Labs | [Redshift Profile](redshift-profile) | [Redshift Configs](redshift-configs) | [#db-redshift](https://getdbt.slack.com/archives/C01DRQ178LQ) | | +| Snowflake | [dbt-snowflake](https://github.com/dbt-labs/dbt-snowflake) | :white_check_mark: (1.2) | :white_check_mark: | :white_check_mark: | dbt Labs | [Snowflake Profile](snowflake-profile) | [Snowflake Configs](snowflake-configs) | [#db-snowflake](https://getdbt.slack.com/archives/C01DRQ178LQ) | | +| Apache Spark | [dbt-spark](https://github.com/dbt-labs/dbt-spark) | :white_check_mark: (1.2) | :white_check_mark: | :white_check_mark: | dbt Labs | [Spark Profile](spark-profile) | [Spark Configs](spark-configs) | [#db-databricks-and-spark](https://getdbt.slack.com/archives/C01DRQ178LQ) | | +| Starburst & Trino | [dbt-trino](https://github.com/starburstdata/dbt-trino) | :construction: (1.2) | :white_check_mark: | | Starburst | [Trino Profile](trino-profile) | | [#db-presto-trino](https://getdbt.slack.com/archives/C013MLFR7BQ) | | +| IBM DB2 | [dbt-ibmdb2](https://github.com/aurany/dbt-ibmdb2) | | | | Community | [DB2 Profile](ibmdb2-profile) | | n/a | IBM DB2 V9fp2+ | +| ClickHouse | [dbt-clickhouse](https://github.com/ClickHouse/dbt-clickhouse) | | | | Clickhouse | [Clickhouse Profile](clickhouse-profile) | [Clickhouse Configs](clickhouse-configs) | [#db-redshift](https://getdbt.slack.com/archives/C01DRQ178LQ) | | +| Exasol Analytics | [dbt-exasol](https://github.com/tglunde/dbt-exasol) | | | | Community | [Exasol Profile](exasol-profile) | | n/a | Exasol 6.x and later | +| Firebolt | [dbt-firebolt](https://github.com/firebolt-db/dbt-firebolt) | | :warning: | | Firebolt | [Firebolt Profile](firebolt-profile) | [Firebolt Configs](firebolt-configs) | [#db-firebolt](https://getdbt.slack.com/archives/C02PYT5CXN0) | | +| AWS Glue | [dbt-glue](https://github.com/aws-samples/dbt-glue) | | | | AWS | [Glue Profile](glue-profile) | [Glue Configs](glue-configs) | [#db-glue](https://getdbt.slack.com/archives/C02R4HSMBAT) | Glue 2.0+ | +| Hive | [dbt-hive](https://github.com/cloudera/dbt-hive) | | | | Cloudera | [Hive Profile](hive-profile) | [Hive Configs](hive-configs) | [#db-hive](https://getdbt.slack.com/archives/C0401DTNSKW) | | +| Impala | [dbt-impala](https://github.com/cloudera/dbt-impala) | | | | Cloudera | [Impala Profile](impala-profile) | [Impala Configs](impala-configs) | [#db-impala](https://getdbt.slack.com/archives/C03K2PTHHTP) | | +| iomete | [dbt-iomete](https://github.com/iomete/dbt-iomete) | | | | Iomete | [iomete Profile](iomete-profile) | | [#db-iomete](https://getdbt.slack.com/archives/C03JFG22EP9) | | +| Layer Bigquery | [dbt-layer](https://github.com/layerai/dbt-layer) | | | | Layer AI | [Layer Profile](layer-profile) | | [#tools-layer](https://getdbt.slack.com/archives/C03STA39TFE) | | +| Materialize | [dbt-materialize](https://github.com/MaterializeInc/materialize/blob/main/misc/dbt-materialize) | | :warning: | | Materialize | [Materialize Profile](materialize-profile) | [Materialize Configs](materialize-configs) | [#db-materialize](https://getdbt.slack.com/archives/C01PWAH41A5) | | +| MindsDB | [dbt-mindsdb](https://github.com/mindsdb/dbt-mindsdb) | | | | MindsDB | [MindsDB Profile](mindsdb-profile) | [MindsDB Configs](mindsdb-configs) | n/a | | +| MySQL | [dbt-mysql](https://github.com/dbeatty10/dbt-mysql) | | | | Community | [MySQL Profile](mysql-profile) | | [#db-mysql-family](https://getdbt.slack.com/archives/C03BK0SHC64) | MySQL 5.7 and 8.0 | +| Oracle | [dbt-oracle](https://github.com/oracle/dbt-oracle) | | | | Oracle | [Oracle Profile](oracle-profile) | | [#db-oracle](https://getdbt.slack.com/archives/C01PWH4TXLY) | | +| Rockset | [dbt-rockset](https://github.com/rockset/dbt-rockset) | | :warning: | | Rockset | [Rockset Profile](rockset-profile) | | [#db-rockset](https://getdbt.slack.com/archives/C02J7AZUAMN) | | +| SingleStore | [dbt-singlestore](https://github.com/memsql/dbt-singlestore) | | | | Single Store | [SingleStore Profile](singlestore-profile) | | [#db-singlestore](https://getdbt.slack.com/archives/C02V2QHFF7U) | | +| Teradata | [dbt-teradata](https://github.com/teradata/dbt-teradata) | | | | Teradata | [Teradata Profile](teradata-profile) | [Teradata Configs](teradata-configs) | [#db-teradata](https://getdbt.slack.com/archives/C027B6BHMT3) | | +| TiDB | [dbt-tidb](https://github.com/pingcap/dbt-tidb) | | | | PingCAP | [TiDB Profile](tidb-profile) | | [#db-tidb](https://getdbt.slack.com/archives/C03CC86R1NY) | | +| SQL Server & Azure SQL | [dbt-sqlserver](https://github.com/dbt-msft/dbt-sqlserver/) | | | | Community | [SQL Server Profile](mssql-profile) | [SQL Server Configs](mssql-configs) | [#db-sqlserver](https://getdbt.slack.com/archives/CMRMDDQ9W) | SQL Server 2016 and later | +| Azure Synapse | [dbt-synapse](https://github.com/dbt-msft/dbt-synapse) | | | | Community | [Synapse Profile](azuresynapse-profile) | [Synapse Configs](azuresynapse-configs) | [#db-synapse](https://getdbt.slack.com/archives/C01DRQ178LQ) | Azure Synapse 10+ | +| Dremio | [dbt-dremio](https://github.com/fabrice-etanchaud/dbt-dremio/) | | | | Community | [Dremio Profile](dremio-profile) | | n/a | Dremio 4.7+ | +| Athena | [dbt-athena](https://github.com/Tomme/dbt-athena) | | | | Community | [Athena Profile](athena-profile) | | [#db-athena](https://getdbt.slack.com/archives/C013MLFR7BQ) | Athena engine version 2 | +| Vertica | [dbt-vertica](https://github.com/ahedengren/dbt-vertica) | | | | Community | [Vertica Profile](vertica-profile) | | n/a | Vertica 10.0+ | +| Greenplum | [dbt-greenplum](https://github.com/markporoshin/dbt-greenplum) | | | | Community | [Greenplum Profile](greenplum-profile) | [Greenplum Configs](greenplum-configs) | n/a | Greenplum 6.0+ | +| DuckDB | [dbt-duckdb](https://github.com/jwills/dbt-duckdb/) | | | | Community | [DuckDB Profile](duckdb-profile) | | [#db-duckdb](https://getdbt.slack.com/archives/C039D1J1LA2) | DuckDB 0.3.2 | +| SQLite | [dbt-sqlite](https://github.com/codeforkjeff/dbt-sqlite) | | | | Community | [SQLite Profile](sqlite-profile) | | n/a | SQlite Version 3.0+ | [^1]: Here are the two different adapters. Use the PyPI package name when installing with `pip` From 4ebb96c0364482f7685224210077383502f58dea Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Tue, 20 Sep 2022 10:09:22 -0400 Subject: [PATCH 045/130] remove in property validation values which wont be used --- website/functions/get-discourse-topics.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/functions/get-discourse-topics.js b/website/functions/get-discourse-topics.js index 04eb90c6fdb..c5ec726b2f6 100644 --- a/website/functions/get-discourse-topics.js +++ b/website/functions/get-discourse-topics.js @@ -90,7 +90,7 @@ function buildQueryString(body) { function validateItem({ key, value }) { // predefined Discourse values // https://docs.discourse.org/#tag/Search/operation/search - const inStringValues = ['title', 'likes', 'personal', 'messages', 'seen', 'unseen', 'posted', 'created', 'watching', 'tracking', 'bookmarks', 'assigned', 'unassigned', 'first', 'pinned', 'wiki'] + const inStringValues = ['title', 'first', 'pinned', 'wiki'] const orderValues = ['latest', 'likes', 'views', 'latest_topic'] const statusValues = ['open', 'closed', 'public', 'archived', 'noreplies', 'single_user', 'solved', 'unsolved'] From 8b40768ae046399d19b6a0a600ac050f6472b47f Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Tue, 20 Sep 2022 10:12:51 -0400 Subject: [PATCH 046/130] default to 90 days for after property for all categories besides 'help' if not set --- website/src/components/discourse/index.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/website/src/components/discourse/index.js b/website/src/components/discourse/index.js index 9789fb4a920..b9d3d5df741 100644 --- a/website/src/components/discourse/index.js +++ b/website/src/components/discourse/index.js @@ -40,8 +40,7 @@ export default function DiscourseFeed({ ? 'http://localhost:8888/.netlify/functions/get-discourse-topics' : '/.netlify/functions/get-discourse-topics' - // If 'after' prop not passed in, set relative - // after date for 'help' & 'discussions' categories + // If 'after' prop not passed in, set relative after date let afterDate = after if(!afterDate) { // Today's date @@ -49,7 +48,7 @@ export default function DiscourseFeed({ if(category === 'help') { const relativeDate = new Date(today.setDate(today.getDate() - 30)); afterDate = formatDate(relativeDate) - } else if(category === 'discussions') { + } else { const relativeDate = new Date(today.setDate(today.getDate() - 90)); afterDate = formatDate(relativeDate) } From f90e9047dbf0b54c43f46430573893ba4b55ef54 Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Tue, 20 Sep 2022 10:34:19 -0400 Subject: [PATCH 047/130] setup DiscourseHelpFeed component with predefined props set and set all original props to undefined --- website/src/components/discourse/index.js | 65 ++++++++++++++++------- website/src/pages/forum.js | 8 +-- website/src/theme/MDXComponents/index.js | 3 +- 3 files changed, 52 insertions(+), 24 deletions(-) diff --git a/website/src/components/discourse/index.js b/website/src/components/discourse/index.js index b9d3d5df741..9102f714e0f 100644 --- a/website/src/components/discourse/index.js +++ b/website/src/components/discourse/index.js @@ -2,26 +2,26 @@ import React, { useState, useEffect } from 'react' import axios from 'axios' import feedStyles from './styles.module.css'; -export default function DiscourseFeed({ - order = 'latest_topic', - status = 'solved', - after = undefined, - before = undefined, - inString = undefined, - min_posts = undefined, - max_posts = undefined, - min_views = undefined, - max_views = undefined, - tags = undefined, - term = undefined, - category = 'help', - title = undefined, - link_text = "Ask the Community", - link_href = `https://discourse.getdbt.com/new-topic${category ? `?category=${category}` : ''}${tags ? (!category ? `?tags=${tags}` : `&tags=${tags}`) : ''}`, - hide_cta = false, +export const DiscourseFeed = ({ + order, + status, + after, + before, + inString, + min_posts, + max_posts, + min_views, + max_views, + tags, + term, + category, + title, + link_text, + link_href, + show_cta, topic_count = 5, styles = {} -}) { +}) => { const [topics, setTopics] = useState([]) const [loading, setLoading] = useState(true) @@ -54,6 +54,20 @@ export default function DiscourseFeed({ } } + console.log('wee', { + status, + order, + after: afterDate, + before, + inString, + min_posts, + max_posts, + min_views, + max_views, + tags, + term, + category, + }) // Get Discourse topics data const { data } = await axios.post(endpoint, { status, @@ -122,13 +136,25 @@ export default function DiscourseFeed({ ))}
        )} - {!hide_cta && ( + {show_cta && ( {link_text} )}
        ) } +export const DiscourseHelpFeed = () => { + return +} + +// Helpers function TopicWrapper({ topic, children }) { if(topic?.slug) { return ( @@ -144,3 +170,4 @@ function TopicWrapper({ topic, children }) { function formatDate(date) { return `${date.getFullYear()}-${('0'+ (date.getMonth()+1)).slice(-2)}-${('0'+ date.getDate()).slice(-2)}` } + diff --git a/website/src/pages/forum.js b/website/src/pages/forum.js index 909ab4bf275..35ab90bf60c 100644 --- a/website/src/pages/forum.js +++ b/website/src/pages/forum.js @@ -1,7 +1,7 @@ import React from 'react'; import Layout from '@theme/Layout'; import Head from '@docusaurus/Head'; -import DiscourseFeed from '@site/src/components/discourse'; +import { DiscourseFeed } from '@site/src/components/discourse'; function Events() { return ( @@ -13,9 +13,9 @@ function Events() {

        dbt Discourse

        - - - + + +
        diff --git a/website/src/theme/MDXComponents/index.js b/website/src/theme/MDXComponents/index.js index e4982bfb146..2fe4c79a228 100644 --- a/website/src/theme/MDXComponents/index.js +++ b/website/src/theme/MDXComponents/index.js @@ -34,7 +34,7 @@ import VersionBlock from '@site/src/components/versionBlock'; import Var from '@site/src/components/variable'; import Term from '@site/src/components/term'; import EventsFeed from '@site/src/components/events'; -import DiscourseFeed from '@site/src/components/discourse'; +import { DiscourseFeed, DiscourseHelpFeed } from '@site/src/components/discourse'; function unwrapMDXElement(element) { if (element?.props?.mdxType && element?.props?.originalType) { @@ -120,5 +120,6 @@ const MDXComponents = { Term: Term, EventsFeed: EventsFeed, DiscourseFeed: DiscourseFeed, + DiscourseHelpFeed: DiscourseHelpFeed, }; export default MDXComponents; From 29fcaff692e44ebad5ddbb1d8312bf801af49122 Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Tue, 20 Sep 2022 10:45:13 -0400 Subject: [PATCH 048/130] add default props to DiscourseHelpFeed component --- website/docs/faqs/Jinja/which-jinja-docs.md | 4 +- website/src/components/discourse/index.js | 62 +++++++++++++-------- 2 files changed, 43 insertions(+), 23 deletions(-) diff --git a/website/docs/faqs/Jinja/which-jinja-docs.md b/website/docs/faqs/Jinja/which-jinja-docs.md index 6c42bfb5962..d41b5220c8a 100644 --- a/website/docs/faqs/Jinja/which-jinja-docs.md +++ b/website/docs/faqs/Jinja/which-jinja-docs.md @@ -11,5 +11,7 @@ If you are stuck with a Jinja issue, it can get confusing where to check for mor 2. [Our Jinja function reference](/docs/building-a-dbt-project/jinja-macros#related-reference-docs): This documents any additional functionality we've added to Jinja in dbt. 3. [Agate's table docs](https://agate.readthedocs.io/page/api/table.html): If you're operating on the result of a query, dbt will pass it back to you as an agate table. This means that the methods you call on the belong to the Agate library rather than Jinja or dbt. - + + + diff --git a/website/src/components/discourse/index.js b/website/src/components/discourse/index.js index 9102f714e0f..b5817aefb16 100644 --- a/website/src/components/discourse/index.js +++ b/website/src/components/discourse/index.js @@ -53,21 +53,7 @@ export const DiscourseFeed = ({ afterDate = formatDate(relativeDate) } } - - console.log('wee', { - status, - order, - after: afterDate, - before, - inString, - min_posts, - max_posts, - min_views, - max_views, - tags, - term, - category, - }) + // Get Discourse topics data const { data } = await axios.post(endpoint, { status, @@ -143,14 +129,46 @@ export const DiscourseFeed = ({ ) } -export const DiscourseHelpFeed = () => { +// Same props can be passed into +// DiscourseHelpFeed to customize further +export const DiscourseHelpFeed = ({ + order = 'latest_topic', + status = 'solved', + category = 'help', + link_text = 'Ask the Community', + link_href = `https://discourse.getdbt.com/new-topic${category ? `?category=${category}` : ''}${tags ? (!category ? `?tags=${tags}` : `&tags=${tags}`) : ''}`, + show_cta = true, + tags, + after, + before, + inString, + min_posts, + max_posts, + min_views, + max_views, + term, + title, + topic_count = 5, + styles = {} +}) => { return } From 3741bad989a01e4ffa9fc28b494c7f9f1ee5fad0 Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Tue, 20 Sep 2022 10:46:37 -0400 Subject: [PATCH 049/130] update styles --- website/src/components/discourse/index.js | 2 +- website/src/components/discourse/styles.module.css | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/website/src/components/discourse/index.js b/website/src/components/discourse/index.js index b5817aefb16..c235847872b 100644 --- a/website/src/components/discourse/index.js +++ b/website/src/components/discourse/index.js @@ -110,7 +110,7 @@ export const DiscourseFeed = ({ {topic.title} {(topic?.author || topic?.posts_count) && ( <> - {' '}- + {' '} {topic?.author && `by ${topic.author}${topic?.posts_count && ','}`} {' '} diff --git a/website/src/components/discourse/styles.module.css b/website/src/components/discourse/styles.module.css index 125251a9e95..ae3a2c411ea 100644 --- a/website/src/components/discourse/styles.module.css +++ b/website/src/components/discourse/styles.module.css @@ -27,6 +27,10 @@ .discourseTopics ul li:last-of-type { border-bottom: none; } +.discourseTopics ul li a { + font-weight: 600; + font-size: 18px; +} /* Cta */ .discourseCta { From 805f11743d153041712e7691e4ece6f051eaf68d Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Tue, 20 Sep 2022 10:54:37 -0400 Subject: [PATCH 050/130] remove status for show-and-tell and discussions category components --- website/src/pages/forum.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/src/pages/forum.js b/website/src/pages/forum.js index 35ab90bf60c..3469d99398e 100644 --- a/website/src/pages/forum.js +++ b/website/src/pages/forum.js @@ -14,8 +14,8 @@ function Events() {

        dbt Discourse

        - - + +
        From dea8a7c3047d15ef713c04ab15f31509d4fabfbd Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Tue, 20 Sep 2022 11:43:16 -0400 Subject: [PATCH 051/130] add like count next to author name and replies if available --- website/functions/get-discourse-topics.js | 23 +++++++++++++++++++---- website/src/components/discourse/index.js | 15 +++++++++------ 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/website/functions/get-discourse-topics.js b/website/functions/get-discourse-topics.js index c5ec726b2f6..2ddc8cce8bf 100644 --- a/website/functions/get-discourse-topics.js +++ b/website/functions/get-discourse-topics.js @@ -17,17 +17,32 @@ async function getDiscourseTopics({ body }) { // Get topics from Discourse let { data: { posts, topics } } = await axios.get(`${discourse_endpoint}/search?q=${query}`, { headers }) - + if(!topics || topics?.length <= 0) throw new Error('Unable to get results from api request.') - // Set author for topics if not querying by specific term + // Set author and like_count for topics if not querying by specific term let allTopics = topics if(!body?.term) { allTopics = topics.reduce((topicsArr, topic) => { - const firstTopicPost = posts?.find(post => post?.post_number === 1 && post?.topic_id === topic?.id) - firstTopicPost && (topic.author = firstTopicPost.username) + // Get first post in topic + const firstTopicPost = posts?.find(post => + post?.post_number === 1 && + post?.topic_id === topic?.id + ) + // If post found + // Get username + if(firstTopicPost?.username) { + topic.author = firstTopicPost.username + } + // Get like count + if(firstTopicPost?.like_count) { + topic.like_count = firstTopicPost.like_count + } + + // Push updated topic to array topicsArr.push(topic) + return topicsArr }, []) } diff --git a/website/src/components/discourse/index.js b/website/src/components/discourse/index.js index c235847872b..91a206f7587 100644 --- a/website/src/components/discourse/index.js +++ b/website/src/components/discourse/index.js @@ -2,6 +2,7 @@ import React, { useState, useEffect } from 'react' import axios from 'axios' import feedStyles from './styles.module.css'; +// Bare component with no default props set export const DiscourseFeed = ({ order, status, @@ -73,7 +74,7 @@ export const DiscourseFeed = ({ // Set error state if data not available if(!data) throw new Error('Unable to get latest topics.') - // Set 5 latest toics + // Set topics count setTopics(data.slice(0, topic_count)) setLoading(false) } catch(err) { @@ -108,13 +109,15 @@ export const DiscourseFeed = ({ )} {topic.title} - {(topic?.author || topic?.posts_count) && ( + {(topic?.author || topic?.posts_count || topic?.like_count) && ( <> {' '} - {topic?.author && `by ${topic.author}${topic?.posts_count && ','}`} + {topic?.author && `by ${topic.author}${topic?.posts_count ? ',' : ''}`} {' '} - {topic?.posts_count && `${topic.posts_count - 1} ${(topic.posts_count - 1) === 1 ? 'reply' : 'replies'}`} + {topic?.posts_count && `${topic.posts_count - 1} ${(topic.posts_count - 1) === 1 ? 'reply' : 'replies'}${topic?.like_count ? ',' : ''}`} + {' '} + {topic?.like_count ? `${topic.like_count} ${(topic.like_count) === 1 ? 'like' : 'likes'}` : ''} )} @@ -129,8 +132,8 @@ export const DiscourseFeed = ({ ) } -// Same props can be passed into -// DiscourseHelpFeed to customize further +// A more specific version of DiscourseFeed +// with default props set. Same props can be used export const DiscourseHelpFeed = ({ order = 'latest_topic', status = 'solved', From 577058b3588584f1e2a74b7dd0e869e4ba9eeb9b Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Tue, 20 Sep 2022 11:51:03 -0400 Subject: [PATCH 052/130] move tags prop ahead of link_href in DiscourseHelpFeed --- website/src/components/discourse/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/src/components/discourse/index.js b/website/src/components/discourse/index.js index 91a206f7587..c52f4381fd9 100644 --- a/website/src/components/discourse/index.js +++ b/website/src/components/discourse/index.js @@ -138,10 +138,10 @@ export const DiscourseHelpFeed = ({ order = 'latest_topic', status = 'solved', category = 'help', + tags, + show_cta = true, link_text = 'Ask the Community', link_href = `https://discourse.getdbt.com/new-topic${category ? `?category=${category}` : ''}${tags ? (!category ? `?tags=${tags}` : `&tags=${tags}`) : ''}`, - show_cta = true, - tags, after, before, inString, From 1f8b05abf8b6563a680badec76923338e9f6a4d0 Mon Sep 17 00:00:00 2001 From: Anders Swanson Date: Tue, 20 Sep 2022 11:59:43 -0400 Subject: [PATCH 053/130] page refactor --- website/docs/docs/supported-data-platforms.md | 133 +++++++++++------- website/sidebars.js | 1 + 2 files changed, 83 insertions(+), 51 deletions(-) diff --git a/website/docs/docs/supported-data-platforms.md b/website/docs/docs/supported-data-platforms.md index 0ca65b821d2..d1d8f9fb5d8 100644 --- a/website/docs/docs/supported-data-platforms.md +++ b/website/docs/docs/supported-data-platforms.md @@ -3,72 +3,103 @@ title: "Supported Data Platforms" id: "supported-data-platforms" --- -dbt connects to and runs SQL against your database, warehouse, platform, or query engine. It works by using a dedicated [**adapter**](contributing/adapter-development/1-what-are-adapters) for each technology. All the adapters listed below are open source and free to use, just like dbt. +dbt connects to and runs SQL against your database, warehouse, lake or query engine. To keep things simple, we group all of these SQL-speaking things into one bucket called "data platforms". dbt can be extended to any data platform by means of a dedicated _adapter plugin_. These plugins are built as separate Python modules that dbt Core will discover them if they are installed on your system. All the adapters listed below are open source and free to use, just like dbt Core. -If you have a new adapter, please add it to this list using a pull request! See [Documenting your adapter](5-documenting-a-new-adapter) for more information. +To learn more about adapters, check out ["What Are Adapters"](contributing/adapter-development/1-what-are-adapters). + +## Adapter Installation + +With two exceptions [^1], all adapters listed below can be installed from PyPI using `pip install `. The installation will include `dbt-core` and any other required dependencies, which may include other adapter plugins. Read more about [installing dbt](dbt-cli/install/overview). + +## Adapter Taxonomy + +### Verified by dbt Labs + +We have two tiers for dbt-core adapters: "Verified" and "Community". -## Background -### Installation +| Tier | Relevant adapters | +| --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Verified | The adapters:
      • maintained by dbt Labs as well as
      • partner-maintained adapters that have been verified by dbt Labs
      • | +| Community |
      • All other partner-maintained adapters as well as
      • all community adapters.
      • Community adapters in particular tend to be works-in-progress. Contributions from users are highly encouraged (see ["Contributing to a pre-existing adapter"](#contributing-to-a-pre-existing-adapter)) | -With two exceptions [^1], all adapters below can be installed from PyPI using `pip install `. The installation will include `dbt-core` and any other required dependencies, which may include other adapter plugins. Read more about [installing dbt](dbt-cli/install/overview). +### Maintainers -### Types of Adapaters +Who made and maintains and adapter is certainly relevant, but we recommend using an adapter's verification status to determine quality and health of an adapter. So far we have three categories of maintainers: + +| Supported by | Description | +| ------------ | ------------------------------------------------------------------------------------------------------------------------------------- | +| dbt Labs | dbt Labs maintains a set of adapters for some of the most common databases, warehouses, and platforms. | +| Partner | These adapter plugins are built and maintained by the same people who build and maintain the complementary data technology | +| Community | These adapter plugins are contributed and maintained by members of the community 🌱 | + +Note that, while no community plugins are currently supported in dbt Cloud, we expect this to change in the near future. + +## Supported Data Platforms -| Supported by | Description | -| ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| dbt Labs | [dbt Labs](https://github.com/dbt-labs) maintains a set of adapters for some of the most common databases, warehouses, and platforms. (✅ indicates "full support.") | -| Partner | These adapter plugins are built and maintained by the same people who build and maintain the complementary data technology | -| Community | These adapter plugins are contributed and maintained by members of the community 🌱 | +### Verified Adapters + +| Data Platform | Adapter Repository | latest verified version | Cloud support | Maintained By | Profile Setup | Configuration | Slack Channel | +| ----------------- | -------------------------------------------------------------- | ------------------------ | ------------------ | ------------- | ---------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------------------- | +| AlloyDB | [dbt-postgres](https://github.com/dbt-labs/dbt-postgres) | (same as `dbt-postgres`) | :white_check_mark: | n/a | [AlloyDB Profile](alloydb-profile) | | [#db-postgres](https://getdbt.slack.com/archives/C0172G2E273) | +| BigQuery | [dbt-bigquery](https://github.com/dbt-labs/dbt-bigquery) | 1.2.0 | :white_check_mark: | dbt Labs | [BigQuery Profile](bigquery-profile) | [BigQuery Configs](bigquery-configs) | [#db-bigquery](https://getdbt.slack.com/archives/C99SNSRTK) | +| Databricks | [dbt-databricks](https://github.com/databricks/dbt-databricks) | 1.2.0 :construction: | | Databricks | [Databricks Profile](databricks-profile) | [Databricks Configs](spark-configs#databricks-configuration) | [#db-databricks-and-spark](https://getdbt.slack.com/archives/C01DRQ178LQ) | +| Postgres | [dbt-postgres](https://github.com/dbt-labs/dbt-postgres) | 1.2.0 | :white_check_mark: | dbt Labs | [Postgres Profile](postgres-profile) | | [#db-postgres](https://getdbt.slack.com/archives/C0172G2E273) | +| Redshift | [dbt-redshift](https://github.com/dbt-labs/dbt-redshift) | 1.2.0 | :white_check_mark: | dbt Labs | [Redshift Profile](redshift-profile) | [Redshift Configs](redshift-configs) | [#db-redshift](https://getdbt.slack.com/archives/C01DRQ178LQ) | +| Snowflake | [dbt-snowflake](https://github.com/dbt-labs/dbt-snowflake) | 1.2.0 | :white_check_mark: | dbt Labs | [Snowflake Profile](snowflake-profile) | [Snowflake Configs](snowflake-configs) | [#db-snowflake](https://getdbt.slack.com/archives/C01DRQ178LQ) | +| Apache Spark | [dbt-spark](https://github.com/dbt-labs/dbt-spark) | 1.2.0 | :white_check_mark: | dbt Labs | [Spark Profile](spark-profile) | [Spark Configs](spark-configs) | [#db-databricks-and-spark](https://getdbt.slack.com/archives/C01DRQ178LQ) | +| Starburst & Trino | [dbt-trino](https://github.com/starburstdata/dbt-trino) | 1.2.0 :construction: | | Starburst | [Trino Profile](trino-profile) | | [#db-presto-trino](https://getdbt.slack.com/archives/C013MLFR7BQ) | + +### Community Adapters + Community-supported plugins are works in progress, and anyone is welcome to contribute by testing and writing code. If you're interested in contributing: -- Join both the dedicated #adapter-ecosystem channel in [dbt Slack](https://community.getdbt.com/) and the channel for your adapter's data store (e.g. #db-sqlserver, #db-athena) + +- Join both the dedicated #adapter-ecosystem channel in [dbt Slack](https://community.getdbt.com/) and the channel for your adapter's data store (e.g. #db-sqlserver, #db-athena) - Check out the open issues in the plugin's source repository -Note that, while no community plugins are currently supported in dbt Cloud, we expect this to change in the near future. +| Data Platform | Adapter Repository | Maintained By | Profile Setup | Configuration | Slack Channel | Notes | +| ---------------------- | ----------------------------------------------------------------------------------------------- | ------------- | ------------------------------------------ | ------------------------------------------ | ----------------------------------------------------------------- | ------------------------- | +| Athena | [dbt-athena](https://github.com/Tomme/dbt-athena) | Community | [Athena Profile](athena-profile) | | [#db-athena](https://getdbt.slack.com/archives/C013MLFR7BQ) | Athena engine version 2 | +| ClickHouse | [dbt-clickhouse](https://github.com/ClickHouse/dbt-clickhouse) | Clickhouse | [Clickhouse Profile](clickhouse-profile) | [Clickhouse Configs](clickhouse-configs) | [#db-redshift](https://getdbt.slack.com/archives/C01DRQ178LQ) | | +| IBM DB2 | [dbt-ibmdb2](https://github.com/aurany/dbt-ibmdb2) | Community | [DB2 Profile](ibmdb2-profile) | | n/a | IBM DB2 V9fp2+ | +| DuckDB | [dbt-duckdb](https://github.com/jwills/dbt-duckdb/) | Community | [DuckDB Profile](duckdb-profile) | | [#db-duckdb](https://getdbt.slack.com/archives/C039D1J1LA2) | DuckDB 0.3.2 | +| Dremio | [dbt-dremio](https://github.com/fabrice-etanchaud/dbt-dremio/) | Community | [Dremio Profile](dremio-profile) | | n/a | Dremio 4.7+ | +| Exasol Analytics | [dbt-exasol](https://github.com/tglunde/dbt-exasol) | Community | [Exasol Profile](exasol-profile) | | n/a | Exasol 6.x and later | +| Firebolt | [dbt-firebolt](https://github.com/firebolt-db/dbt-firebolt) | Firebolt | [Firebolt Profile](firebolt-profile) | [Firebolt Configs](firebolt-configs) | [#db-firebolt](https://getdbt.slack.com/archives/C02PYT5CXN0) | | +| AWS Glue | [dbt-glue](https://github.com/aws-samples/dbt-glue) | AWS | [Glue Profile](glue-profile) | [Glue Configs](glue-configs) | [#db-glue](https://getdbt.slack.com/archives/C02R4HSMBAT) | Glue 2.0+ | +| Greenplum | [dbt-greenplum](https://github.com/markporoshin/dbt-greenplum) | Community | [Greenplum Profile](greenplum-profile) | [Greenplum Configs](greenplum-configs) | n/a | Greenplum 6.0+ | +| Hive | [dbt-hive](https://github.com/cloudera/dbt-hive) | Cloudera | [Hive Profile](hive-profile) | [Hive Configs](hive-configs) | [#db-hive](https://getdbt.slack.com/archives/C0401DTNSKW) | | +| Impala | [dbt-impala](https://github.com/cloudera/dbt-impala) | Cloudera | [Impala Profile](impala-profile) | [Impala Configs](impala-configs) | [#db-impala](https://getdbt.slack.com/archives/C03K2PTHHTP) | | +| iomete | [dbt-iomete](https://github.com/iomete/dbt-iomete) | Iomete | [iomete Profile](iomete-profile) | | [#db-iomete](https://getdbt.slack.com/archives/C03JFG22EP9) | | +| Layer Bigquery | [dbt-layer](https://github.com/layerai/dbt-layer) | Layer AI | [Layer Profile](layer-profile) | | [#tools-layer](https://getdbt.slack.com/archives/C03STA39TFE) | | +| Materialize | [dbt-materialize](https://github.com/MaterializeInc/materialize/blob/main/misc/dbt-materialize) | Materialize | [Materialize Profile](materialize-profile) | [Materialize Configs](materialize-configs) | [#db-materialize](https://getdbt.slack.com/archives/C01PWAH41A5) | | +| MindsDB | [dbt-mindsdb](https://github.com/mindsdb/dbt-mindsdb) | MindsDB | [MindsDB Profile](mindsdb-profile) | [MindsDB Configs](mindsdb-configs) | n/a | | +| MySQL | [dbt-mysql](https://github.com/dbeatty10/dbt-mysql) | Community | [MySQL Profile](mysql-profile) | | [#db-mysql-family](https://getdbt.slack.com/archives/C03BK0SHC64) | MySQL 5.7 and 8.0 | +| Oracle | [dbt-oracle](https://github.com/oracle/dbt-oracle) | Oracle | [Oracle Profile](oracle-profile) | | [#db-oracle](https://getdbt.slack.com/archives/C01PWH4TXLY) | | +| Rockset | [dbt-rockset](https://github.com/rockset/dbt-rockset) | Rockset | [Rockset Profile](rockset-profile) | | [#db-rockset](https://getdbt.slack.com/archives/C02J7AZUAMN) | | +| SingleStore | [dbt-singlestore](https://github.com/memsql/dbt-singlestore) | Single Store | [SingleStore Profile](singlestore-profile) | | [#db-singlestore](https://getdbt.slack.com/archives/C02V2QHFF7U) | | +| SQLite | [dbt-sqlite](https://github.com/codeforkjeff/dbt-sqlite) | Community | [SQLite Profile](sqlite-profile) | | n/a | SQlite Version 3.0+ | +| SQL Server & Azure SQL | [dbt-sqlserver](https://github.com/dbt-msft/dbt-sqlserver/) | Community | [SQL Server Profile](mssql-profile) | [SQL Server Configs](mssql-configs) | [#db-sqlserver](https://getdbt.slack.com/archives/CMRMDDQ9W) | SQL Server 2016 and later | +| Azure Synapse | [dbt-synapse](https://github.com/dbt-msft/dbt-synapse) | Community | [Synapse Profile](azuresynapse-profile) | [Synapse Configs](azuresynapse-configs) | [#db-synapse](https://getdbt.slack.com/archives/C01DRQ178LQ) | Azure Synapse 10+ | +| Teradata | [dbt-teradata](https://github.com/teradata/dbt-teradata) | Teradata | [Teradata Profile](teradata-profile) | [Teradata Configs](teradata-configs) | [#db-teradata](https://getdbt.slack.com/archives/C027B6BHMT3) | | +| TiDB | [dbt-tidb](https://github.com/pingcap/dbt-tidb) | PingCAP | [TiDB Profile](tidb-profile) | | [#db-tidb](https://getdbt.slack.com/archives/C03CC86R1NY) | | +| Vertica | [dbt-vertica](https://github.com/ahedengren/dbt-vertica) | Community | [Vertica Profile](vertica-profile) | | n/a | Vertica 10.0+ | + +## Contributing to dbt-core adapters + +### Contributing to a pre-existing adapter -### Creating a new adapter +Community-supported plugins are works in progress, and anyone is welcome to contribute by testing and writing code. If you're interested in contributing: -dbt can be extended to any SQL-speaking database, warehouse, data lake, query engine, or analytical platform by means of an _adapter plugin_. These plugins can be built as separate Python modules, and dbt will discover them if they are installed on your system. If you see something missing from the lists above, and you're interested in developing an integration, read more about [building a new adapter](/docs/contributing/adapter-development/3-building-a-new-adapter). +- Join both the dedicated channel, [#adapter-ecosystem](https://getdbt.slack.com/archives/C030A0UF5LM), in [dbt Slack](https://community.getdbt.com/) and the channel for your adapter's data store (see "Slack Channel" column of above tables) +- Check out the open issues in the plugin's source repository (follow relevant link in "Adapter Repository" column of above tables) -## Supported Data Platforms +### Creating a new adapter -| Data Platform | Adapter Repository | Verified? (latest verified version) | Core feature tier | Cloud support | Maintained By | Profile Setup | Configuration | Slack Channel | Notes | -| ---------------------- | ----------------------------------------------------------------------------------------------- | ------------------------------------------- | ------------------ | ------------------ | ------------- | ------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------------------- | ------------------------- | -| AlloyDB | [dbt-postgres](https://github.com/dbt-labs/dbt-postgres) | :white_check_mark: (same as `dbt-postgres`) | :white_check_mark: | :white_check_mark: | | [AlloyDB Profile](alloydb-profile) | | [#db-postgres](https://getdbt.slack.com/archives/C0172G2E273) | | -| BigQuery | [dbt-bigquery](https://github.com/dbt-labs/dbt-bigquery) | :white_check_mark: (1.2) | :white_check_mark: | :white_check_mark: | dbt Labs | [BigQuery Profile](bigquery-profile) | [BigQuery Configs](bigquery-configs) | [#db-bigquery](https://getdbt.slack.com/archives/C99SNSRTK) | | -| Databricks | [dbt-databricks](https://github.com/databricks/dbt-databricks) | :construction: (1.2) | :white_check_mark: | | Databricks | [Databricks Profile](databricks-profile) | [Databricks Configs](spark-configs#databricks-configuration) | [#db-databricks-and-spark](https://getdbt.slack.com/archives/C01DRQ178LQ) | | -| Postgres | [dbt-postgres](https://github.com/dbt-labs/dbt-postgres) | :white_check_mark: (1.2) | :white_check_mark: | :white_check_mark: | dbt Labs | [Postgres Profile](postgres-profile) | | [#db-postgres](https://getdbt.slack.com/archives/C0172G2E273) | | -| Redshift | [dbt-redshift](https://github.com/dbt-labs/dbt-redshift) | :white_check_mark: (1.2) | :white_check_mark: | :white_check_mark: | dbt Labs | [Redshift Profile](redshift-profile) | [Redshift Configs](redshift-configs) | [#db-redshift](https://getdbt.slack.com/archives/C01DRQ178LQ) | | -| Snowflake | [dbt-snowflake](https://github.com/dbt-labs/dbt-snowflake) | :white_check_mark: (1.2) | :white_check_mark: | :white_check_mark: | dbt Labs | [Snowflake Profile](snowflake-profile) | [Snowflake Configs](snowflake-configs) | [#db-snowflake](https://getdbt.slack.com/archives/C01DRQ178LQ) | | -| Apache Spark | [dbt-spark](https://github.com/dbt-labs/dbt-spark) | :white_check_mark: (1.2) | :white_check_mark: | :white_check_mark: | dbt Labs | [Spark Profile](spark-profile) | [Spark Configs](spark-configs) | [#db-databricks-and-spark](https://getdbt.slack.com/archives/C01DRQ178LQ) | | -| Starburst & Trino | [dbt-trino](https://github.com/starburstdata/dbt-trino) | :construction: (1.2) | :white_check_mark: | | Starburst | [Trino Profile](trino-profile) | | [#db-presto-trino](https://getdbt.slack.com/archives/C013MLFR7BQ) | | -| IBM DB2 | [dbt-ibmdb2](https://github.com/aurany/dbt-ibmdb2) | | | | Community | [DB2 Profile](ibmdb2-profile) | | n/a | IBM DB2 V9fp2+ | -| ClickHouse | [dbt-clickhouse](https://github.com/ClickHouse/dbt-clickhouse) | | | | Clickhouse | [Clickhouse Profile](clickhouse-profile) | [Clickhouse Configs](clickhouse-configs) | [#db-redshift](https://getdbt.slack.com/archives/C01DRQ178LQ) | | -| Exasol Analytics | [dbt-exasol](https://github.com/tglunde/dbt-exasol) | | | | Community | [Exasol Profile](exasol-profile) | | n/a | Exasol 6.x and later | -| Firebolt | [dbt-firebolt](https://github.com/firebolt-db/dbt-firebolt) | | :warning: | | Firebolt | [Firebolt Profile](firebolt-profile) | [Firebolt Configs](firebolt-configs) | [#db-firebolt](https://getdbt.slack.com/archives/C02PYT5CXN0) | | -| AWS Glue | [dbt-glue](https://github.com/aws-samples/dbt-glue) | | | | AWS | [Glue Profile](glue-profile) | [Glue Configs](glue-configs) | [#db-glue](https://getdbt.slack.com/archives/C02R4HSMBAT) | Glue 2.0+ | -| Hive | [dbt-hive](https://github.com/cloudera/dbt-hive) | | | | Cloudera | [Hive Profile](hive-profile) | [Hive Configs](hive-configs) | [#db-hive](https://getdbt.slack.com/archives/C0401DTNSKW) | | -| Impala | [dbt-impala](https://github.com/cloudera/dbt-impala) | | | | Cloudera | [Impala Profile](impala-profile) | [Impala Configs](impala-configs) | [#db-impala](https://getdbt.slack.com/archives/C03K2PTHHTP) | | -| iomete | [dbt-iomete](https://github.com/iomete/dbt-iomete) | | | | Iomete | [iomete Profile](iomete-profile) | | [#db-iomete](https://getdbt.slack.com/archives/C03JFG22EP9) | | -| Layer Bigquery | [dbt-layer](https://github.com/layerai/dbt-layer) | | | | Layer AI | [Layer Profile](layer-profile) | | [#tools-layer](https://getdbt.slack.com/archives/C03STA39TFE) | | -| Materialize | [dbt-materialize](https://github.com/MaterializeInc/materialize/blob/main/misc/dbt-materialize) | | :warning: | | Materialize | [Materialize Profile](materialize-profile) | [Materialize Configs](materialize-configs) | [#db-materialize](https://getdbt.slack.com/archives/C01PWAH41A5) | | -| MindsDB | [dbt-mindsdb](https://github.com/mindsdb/dbt-mindsdb) | | | | MindsDB | [MindsDB Profile](mindsdb-profile) | [MindsDB Configs](mindsdb-configs) | n/a | | -| MySQL | [dbt-mysql](https://github.com/dbeatty10/dbt-mysql) | | | | Community | [MySQL Profile](mysql-profile) | | [#db-mysql-family](https://getdbt.slack.com/archives/C03BK0SHC64) | MySQL 5.7 and 8.0 | -| Oracle | [dbt-oracle](https://github.com/oracle/dbt-oracle) | | | | Oracle | [Oracle Profile](oracle-profile) | | [#db-oracle](https://getdbt.slack.com/archives/C01PWH4TXLY) | | -| Rockset | [dbt-rockset](https://github.com/rockset/dbt-rockset) | | :warning: | | Rockset | [Rockset Profile](rockset-profile) | | [#db-rockset](https://getdbt.slack.com/archives/C02J7AZUAMN) | | -| SingleStore | [dbt-singlestore](https://github.com/memsql/dbt-singlestore) | | | | Single Store | [SingleStore Profile](singlestore-profile) | | [#db-singlestore](https://getdbt.slack.com/archives/C02V2QHFF7U) | | -| Teradata | [dbt-teradata](https://github.com/teradata/dbt-teradata) | | | | Teradata | [Teradata Profile](teradata-profile) | [Teradata Configs](teradata-configs) | [#db-teradata](https://getdbt.slack.com/archives/C027B6BHMT3) | | -| TiDB | [dbt-tidb](https://github.com/pingcap/dbt-tidb) | | | | PingCAP | [TiDB Profile](tidb-profile) | | [#db-tidb](https://getdbt.slack.com/archives/C03CC86R1NY) | | -| SQL Server & Azure SQL | [dbt-sqlserver](https://github.com/dbt-msft/dbt-sqlserver/) | | | | Community | [SQL Server Profile](mssql-profile) | [SQL Server Configs](mssql-configs) | [#db-sqlserver](https://getdbt.slack.com/archives/CMRMDDQ9W) | SQL Server 2016 and later | -| Azure Synapse | [dbt-synapse](https://github.com/dbt-msft/dbt-synapse) | | | | Community | [Synapse Profile](azuresynapse-profile) | [Synapse Configs](azuresynapse-configs) | [#db-synapse](https://getdbt.slack.com/archives/C01DRQ178LQ) | Azure Synapse 10+ | -| Dremio | [dbt-dremio](https://github.com/fabrice-etanchaud/dbt-dremio/) | | | | Community | [Dremio Profile](dremio-profile) | | n/a | Dremio 4.7+ | -| Athena | [dbt-athena](https://github.com/Tomme/dbt-athena) | | | | Community | [Athena Profile](athena-profile) | | [#db-athena](https://getdbt.slack.com/archives/C013MLFR7BQ) | Athena engine version 2 | -| Vertica | [dbt-vertica](https://github.com/ahedengren/dbt-vertica) | | | | Community | [Vertica Profile](vertica-profile) | | n/a | Vertica 10.0+ | -| Greenplum | [dbt-greenplum](https://github.com/markporoshin/dbt-greenplum) | | | | Community | [Greenplum Profile](greenplum-profile) | [Greenplum Configs](greenplum-configs) | n/a | Greenplum 6.0+ | -| DuckDB | [dbt-duckdb](https://github.com/jwills/dbt-duckdb/) | | | | Community | [DuckDB Profile](duckdb-profile) | | [#db-duckdb](https://getdbt.slack.com/archives/C039D1J1LA2) | DuckDB 0.3.2 | -| SQLite | [dbt-sqlite](https://github.com/codeforkjeff/dbt-sqlite) | | | | Community | [SQLite Profile](sqlite-profile) | | n/a | SQlite Version 3.0+ | +If you see something missing from the lists above, and you're interested in developing an integration, read more about adapters and how they're developed in the ["Adapter Development"](/docs/contributing/adapter-development) section. +If you have a new adapter, please add it to this list using a pull request! See [Documenting your adapter](5-documenting-a-new-adapter) for more information. [^1]: Here are the two different adapters. Use the PyPI package name when installing with `pip` diff --git a/website/sidebars.js b/website/sidebars.js index 7a04d1857be..b65622eadf9 100644 --- a/website/sidebars.js +++ b/website/sidebars.js @@ -64,6 +64,7 @@ const sidebarSettings = { link: { type: 'generated-index', title: 'Adapter Development', + id: 'adapter-development', description: 'Learn what an adapter is what what\'s required to make one. Also how to build, test, document, promote, and verify your new adapter. Visit the [#adapter-ecosystem](https://getdbt.slack.com/archives/C030A0UF5LM) Slack channel for additional help beyond this section.', }, From 72c59b19551fcc8e48b312d77f0ba985ad04cfd8 Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Tue, 20 Sep 2022 11:59:56 -0400 Subject: [PATCH 054/130] keep button text white in dark mode --- website/src/components/discourse/styles.module.css | 2 ++ 1 file changed, 2 insertions(+) diff --git a/website/src/components/discourse/styles.module.css b/website/src/components/discourse/styles.module.css index ae3a2c411ea..34c228838f9 100644 --- a/website/src/components/discourse/styles.module.css +++ b/website/src/components/discourse/styles.module.css @@ -36,9 +36,11 @@ .discourseCta { font-size: 1.1rem; margin-top: auto; + color: #fff; } .discourseCta:hover { background: var(--color-light-teal); + color: #fff; } /* Loading icon */ From 083cfe1190e277f23e88551e7f3649092eb222b9 Mon Sep 17 00:00:00 2001 From: Anders Swanson Date: Tue, 20 Sep 2022 11:59:43 -0400 Subject: [PATCH 055/130] page refactor --- website/docs/docs/supported-data-platforms.md | 133 +++++++++++------- 1 file changed, 82 insertions(+), 51 deletions(-) diff --git a/website/docs/docs/supported-data-platforms.md b/website/docs/docs/supported-data-platforms.md index 0ca65b821d2..d1d8f9fb5d8 100644 --- a/website/docs/docs/supported-data-platforms.md +++ b/website/docs/docs/supported-data-platforms.md @@ -3,72 +3,103 @@ title: "Supported Data Platforms" id: "supported-data-platforms" --- -dbt connects to and runs SQL against your database, warehouse, platform, or query engine. It works by using a dedicated [**adapter**](contributing/adapter-development/1-what-are-adapters) for each technology. All the adapters listed below are open source and free to use, just like dbt. +dbt connects to and runs SQL against your database, warehouse, lake or query engine. To keep things simple, we group all of these SQL-speaking things into one bucket called "data platforms". dbt can be extended to any data platform by means of a dedicated _adapter plugin_. These plugins are built as separate Python modules that dbt Core will discover them if they are installed on your system. All the adapters listed below are open source and free to use, just like dbt Core. -If you have a new adapter, please add it to this list using a pull request! See [Documenting your adapter](5-documenting-a-new-adapter) for more information. +To learn more about adapters, check out ["What Are Adapters"](contributing/adapter-development/1-what-are-adapters). + +## Adapter Installation + +With two exceptions [^1], all adapters listed below can be installed from PyPI using `pip install `. The installation will include `dbt-core` and any other required dependencies, which may include other adapter plugins. Read more about [installing dbt](dbt-cli/install/overview). + +## Adapter Taxonomy + +### Verified by dbt Labs + +We have two tiers for dbt-core adapters: "Verified" and "Community". -## Background -### Installation +| Tier | Relevant adapters | +| --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Verified | The adapters:
      • maintained by dbt Labs as well as
      • partner-maintained adapters that have been verified by dbt Labs
      • | +| Community |
      • All other partner-maintained adapters as well as
      • all community adapters.
      • Community adapters in particular tend to be works-in-progress. Contributions from users are highly encouraged (see ["Contributing to a pre-existing adapter"](#contributing-to-a-pre-existing-adapter)) | -With two exceptions [^1], all adapters below can be installed from PyPI using `pip install `. The installation will include `dbt-core` and any other required dependencies, which may include other adapter plugins. Read more about [installing dbt](dbt-cli/install/overview). +### Maintainers -### Types of Adapaters +Who made and maintains and adapter is certainly relevant, but we recommend using an adapter's verification status to determine quality and health of an adapter. So far we have three categories of maintainers: + +| Supported by | Description | +| ------------ | ------------------------------------------------------------------------------------------------------------------------------------- | +| dbt Labs | dbt Labs maintains a set of adapters for some of the most common databases, warehouses, and platforms. | +| Partner | These adapter plugins are built and maintained by the same people who build and maintain the complementary data technology | +| Community | These adapter plugins are contributed and maintained by members of the community 🌱 | + +Note that, while no community plugins are currently supported in dbt Cloud, we expect this to change in the near future. + +## Supported Data Platforms -| Supported by | Description | -| ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| dbt Labs | [dbt Labs](https://github.com/dbt-labs) maintains a set of adapters for some of the most common databases, warehouses, and platforms. (✅ indicates "full support.") | -| Partner | These adapter plugins are built and maintained by the same people who build and maintain the complementary data technology | -| Community | These adapter plugins are contributed and maintained by members of the community 🌱 | +### Verified Adapters + +| Data Platform | Adapter Repository | latest verified version | Cloud support | Maintained By | Profile Setup | Configuration | Slack Channel | +| ----------------- | -------------------------------------------------------------- | ------------------------ | ------------------ | ------------- | ---------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------------------- | +| AlloyDB | [dbt-postgres](https://github.com/dbt-labs/dbt-postgres) | (same as `dbt-postgres`) | :white_check_mark: | n/a | [AlloyDB Profile](alloydb-profile) | | [#db-postgres](https://getdbt.slack.com/archives/C0172G2E273) | +| BigQuery | [dbt-bigquery](https://github.com/dbt-labs/dbt-bigquery) | 1.2.0 | :white_check_mark: | dbt Labs | [BigQuery Profile](bigquery-profile) | [BigQuery Configs](bigquery-configs) | [#db-bigquery](https://getdbt.slack.com/archives/C99SNSRTK) | +| Databricks | [dbt-databricks](https://github.com/databricks/dbt-databricks) | 1.2.0 :construction: | | Databricks | [Databricks Profile](databricks-profile) | [Databricks Configs](spark-configs#databricks-configuration) | [#db-databricks-and-spark](https://getdbt.slack.com/archives/C01DRQ178LQ) | +| Postgres | [dbt-postgres](https://github.com/dbt-labs/dbt-postgres) | 1.2.0 | :white_check_mark: | dbt Labs | [Postgres Profile](postgres-profile) | | [#db-postgres](https://getdbt.slack.com/archives/C0172G2E273) | +| Redshift | [dbt-redshift](https://github.com/dbt-labs/dbt-redshift) | 1.2.0 | :white_check_mark: | dbt Labs | [Redshift Profile](redshift-profile) | [Redshift Configs](redshift-configs) | [#db-redshift](https://getdbt.slack.com/archives/C01DRQ178LQ) | +| Snowflake | [dbt-snowflake](https://github.com/dbt-labs/dbt-snowflake) | 1.2.0 | :white_check_mark: | dbt Labs | [Snowflake Profile](snowflake-profile) | [Snowflake Configs](snowflake-configs) | [#db-snowflake](https://getdbt.slack.com/archives/C01DRQ178LQ) | +| Apache Spark | [dbt-spark](https://github.com/dbt-labs/dbt-spark) | 1.2.0 | :white_check_mark: | dbt Labs | [Spark Profile](spark-profile) | [Spark Configs](spark-configs) | [#db-databricks-and-spark](https://getdbt.slack.com/archives/C01DRQ178LQ) | +| Starburst & Trino | [dbt-trino](https://github.com/starburstdata/dbt-trino) | 1.2.0 :construction: | | Starburst | [Trino Profile](trino-profile) | | [#db-presto-trino](https://getdbt.slack.com/archives/C013MLFR7BQ) | + +### Community Adapters + Community-supported plugins are works in progress, and anyone is welcome to contribute by testing and writing code. If you're interested in contributing: -- Join both the dedicated #adapter-ecosystem channel in [dbt Slack](https://community.getdbt.com/) and the channel for your adapter's data store (e.g. #db-sqlserver, #db-athena) + +- Join both the dedicated #adapter-ecosystem channel in [dbt Slack](https://community.getdbt.com/) and the channel for your adapter's data store (e.g. #db-sqlserver, #db-athena) - Check out the open issues in the plugin's source repository -Note that, while no community plugins are currently supported in dbt Cloud, we expect this to change in the near future. +| Data Platform | Adapter Repository | Maintained By | Profile Setup | Configuration | Slack Channel | Notes | +| ---------------------- | ----------------------------------------------------------------------------------------------- | ------------- | ------------------------------------------ | ------------------------------------------ | ----------------------------------------------------------------- | ------------------------- | +| Athena | [dbt-athena](https://github.com/Tomme/dbt-athena) | Community | [Athena Profile](athena-profile) | | [#db-athena](https://getdbt.slack.com/archives/C013MLFR7BQ) | Athena engine version 2 | +| ClickHouse | [dbt-clickhouse](https://github.com/ClickHouse/dbt-clickhouse) | Clickhouse | [Clickhouse Profile](clickhouse-profile) | [Clickhouse Configs](clickhouse-configs) | [#db-redshift](https://getdbt.slack.com/archives/C01DRQ178LQ) | | +| IBM DB2 | [dbt-ibmdb2](https://github.com/aurany/dbt-ibmdb2) | Community | [DB2 Profile](ibmdb2-profile) | | n/a | IBM DB2 V9fp2+ | +| DuckDB | [dbt-duckdb](https://github.com/jwills/dbt-duckdb/) | Community | [DuckDB Profile](duckdb-profile) | | [#db-duckdb](https://getdbt.slack.com/archives/C039D1J1LA2) | DuckDB 0.3.2 | +| Dremio | [dbt-dremio](https://github.com/fabrice-etanchaud/dbt-dremio/) | Community | [Dremio Profile](dremio-profile) | | n/a | Dremio 4.7+ | +| Exasol Analytics | [dbt-exasol](https://github.com/tglunde/dbt-exasol) | Community | [Exasol Profile](exasol-profile) | | n/a | Exasol 6.x and later | +| Firebolt | [dbt-firebolt](https://github.com/firebolt-db/dbt-firebolt) | Firebolt | [Firebolt Profile](firebolt-profile) | [Firebolt Configs](firebolt-configs) | [#db-firebolt](https://getdbt.slack.com/archives/C02PYT5CXN0) | | +| AWS Glue | [dbt-glue](https://github.com/aws-samples/dbt-glue) | AWS | [Glue Profile](glue-profile) | [Glue Configs](glue-configs) | [#db-glue](https://getdbt.slack.com/archives/C02R4HSMBAT) | Glue 2.0+ | +| Greenplum | [dbt-greenplum](https://github.com/markporoshin/dbt-greenplum) | Community | [Greenplum Profile](greenplum-profile) | [Greenplum Configs](greenplum-configs) | n/a | Greenplum 6.0+ | +| Hive | [dbt-hive](https://github.com/cloudera/dbt-hive) | Cloudera | [Hive Profile](hive-profile) | [Hive Configs](hive-configs) | [#db-hive](https://getdbt.slack.com/archives/C0401DTNSKW) | | +| Impala | [dbt-impala](https://github.com/cloudera/dbt-impala) | Cloudera | [Impala Profile](impala-profile) | [Impala Configs](impala-configs) | [#db-impala](https://getdbt.slack.com/archives/C03K2PTHHTP) | | +| iomete | [dbt-iomete](https://github.com/iomete/dbt-iomete) | Iomete | [iomete Profile](iomete-profile) | | [#db-iomete](https://getdbt.slack.com/archives/C03JFG22EP9) | | +| Layer Bigquery | [dbt-layer](https://github.com/layerai/dbt-layer) | Layer AI | [Layer Profile](layer-profile) | | [#tools-layer](https://getdbt.slack.com/archives/C03STA39TFE) | | +| Materialize | [dbt-materialize](https://github.com/MaterializeInc/materialize/blob/main/misc/dbt-materialize) | Materialize | [Materialize Profile](materialize-profile) | [Materialize Configs](materialize-configs) | [#db-materialize](https://getdbt.slack.com/archives/C01PWAH41A5) | | +| MindsDB | [dbt-mindsdb](https://github.com/mindsdb/dbt-mindsdb) | MindsDB | [MindsDB Profile](mindsdb-profile) | [MindsDB Configs](mindsdb-configs) | n/a | | +| MySQL | [dbt-mysql](https://github.com/dbeatty10/dbt-mysql) | Community | [MySQL Profile](mysql-profile) | | [#db-mysql-family](https://getdbt.slack.com/archives/C03BK0SHC64) | MySQL 5.7 and 8.0 | +| Oracle | [dbt-oracle](https://github.com/oracle/dbt-oracle) | Oracle | [Oracle Profile](oracle-profile) | | [#db-oracle](https://getdbt.slack.com/archives/C01PWH4TXLY) | | +| Rockset | [dbt-rockset](https://github.com/rockset/dbt-rockset) | Rockset | [Rockset Profile](rockset-profile) | | [#db-rockset](https://getdbt.slack.com/archives/C02J7AZUAMN) | | +| SingleStore | [dbt-singlestore](https://github.com/memsql/dbt-singlestore) | Single Store | [SingleStore Profile](singlestore-profile) | | [#db-singlestore](https://getdbt.slack.com/archives/C02V2QHFF7U) | | +| SQLite | [dbt-sqlite](https://github.com/codeforkjeff/dbt-sqlite) | Community | [SQLite Profile](sqlite-profile) | | n/a | SQlite Version 3.0+ | +| SQL Server & Azure SQL | [dbt-sqlserver](https://github.com/dbt-msft/dbt-sqlserver/) | Community | [SQL Server Profile](mssql-profile) | [SQL Server Configs](mssql-configs) | [#db-sqlserver](https://getdbt.slack.com/archives/CMRMDDQ9W) | SQL Server 2016 and later | +| Azure Synapse | [dbt-synapse](https://github.com/dbt-msft/dbt-synapse) | Community | [Synapse Profile](azuresynapse-profile) | [Synapse Configs](azuresynapse-configs) | [#db-synapse](https://getdbt.slack.com/archives/C01DRQ178LQ) | Azure Synapse 10+ | +| Teradata | [dbt-teradata](https://github.com/teradata/dbt-teradata) | Teradata | [Teradata Profile](teradata-profile) | [Teradata Configs](teradata-configs) | [#db-teradata](https://getdbt.slack.com/archives/C027B6BHMT3) | | +| TiDB | [dbt-tidb](https://github.com/pingcap/dbt-tidb) | PingCAP | [TiDB Profile](tidb-profile) | | [#db-tidb](https://getdbt.slack.com/archives/C03CC86R1NY) | | +| Vertica | [dbt-vertica](https://github.com/ahedengren/dbt-vertica) | Community | [Vertica Profile](vertica-profile) | | n/a | Vertica 10.0+ | + +## Contributing to dbt-core adapters + +### Contributing to a pre-existing adapter -### Creating a new adapter +Community-supported plugins are works in progress, and anyone is welcome to contribute by testing and writing code. If you're interested in contributing: -dbt can be extended to any SQL-speaking database, warehouse, data lake, query engine, or analytical platform by means of an _adapter plugin_. These plugins can be built as separate Python modules, and dbt will discover them if they are installed on your system. If you see something missing from the lists above, and you're interested in developing an integration, read more about [building a new adapter](/docs/contributing/adapter-development/3-building-a-new-adapter). +- Join both the dedicated channel, [#adapter-ecosystem](https://getdbt.slack.com/archives/C030A0UF5LM), in [dbt Slack](https://community.getdbt.com/) and the channel for your adapter's data store (see "Slack Channel" column of above tables) +- Check out the open issues in the plugin's source repository (follow relevant link in "Adapter Repository" column of above tables) -## Supported Data Platforms +### Creating a new adapter -| Data Platform | Adapter Repository | Verified? (latest verified version) | Core feature tier | Cloud support | Maintained By | Profile Setup | Configuration | Slack Channel | Notes | -| ---------------------- | ----------------------------------------------------------------------------------------------- | ------------------------------------------- | ------------------ | ------------------ | ------------- | ------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------------------- | ------------------------- | -| AlloyDB | [dbt-postgres](https://github.com/dbt-labs/dbt-postgres) | :white_check_mark: (same as `dbt-postgres`) | :white_check_mark: | :white_check_mark: | | [AlloyDB Profile](alloydb-profile) | | [#db-postgres](https://getdbt.slack.com/archives/C0172G2E273) | | -| BigQuery | [dbt-bigquery](https://github.com/dbt-labs/dbt-bigquery) | :white_check_mark: (1.2) | :white_check_mark: | :white_check_mark: | dbt Labs | [BigQuery Profile](bigquery-profile) | [BigQuery Configs](bigquery-configs) | [#db-bigquery](https://getdbt.slack.com/archives/C99SNSRTK) | | -| Databricks | [dbt-databricks](https://github.com/databricks/dbt-databricks) | :construction: (1.2) | :white_check_mark: | | Databricks | [Databricks Profile](databricks-profile) | [Databricks Configs](spark-configs#databricks-configuration) | [#db-databricks-and-spark](https://getdbt.slack.com/archives/C01DRQ178LQ) | | -| Postgres | [dbt-postgres](https://github.com/dbt-labs/dbt-postgres) | :white_check_mark: (1.2) | :white_check_mark: | :white_check_mark: | dbt Labs | [Postgres Profile](postgres-profile) | | [#db-postgres](https://getdbt.slack.com/archives/C0172G2E273) | | -| Redshift | [dbt-redshift](https://github.com/dbt-labs/dbt-redshift) | :white_check_mark: (1.2) | :white_check_mark: | :white_check_mark: | dbt Labs | [Redshift Profile](redshift-profile) | [Redshift Configs](redshift-configs) | [#db-redshift](https://getdbt.slack.com/archives/C01DRQ178LQ) | | -| Snowflake | [dbt-snowflake](https://github.com/dbt-labs/dbt-snowflake) | :white_check_mark: (1.2) | :white_check_mark: | :white_check_mark: | dbt Labs | [Snowflake Profile](snowflake-profile) | [Snowflake Configs](snowflake-configs) | [#db-snowflake](https://getdbt.slack.com/archives/C01DRQ178LQ) | | -| Apache Spark | [dbt-spark](https://github.com/dbt-labs/dbt-spark) | :white_check_mark: (1.2) | :white_check_mark: | :white_check_mark: | dbt Labs | [Spark Profile](spark-profile) | [Spark Configs](spark-configs) | [#db-databricks-and-spark](https://getdbt.slack.com/archives/C01DRQ178LQ) | | -| Starburst & Trino | [dbt-trino](https://github.com/starburstdata/dbt-trino) | :construction: (1.2) | :white_check_mark: | | Starburst | [Trino Profile](trino-profile) | | [#db-presto-trino](https://getdbt.slack.com/archives/C013MLFR7BQ) | | -| IBM DB2 | [dbt-ibmdb2](https://github.com/aurany/dbt-ibmdb2) | | | | Community | [DB2 Profile](ibmdb2-profile) | | n/a | IBM DB2 V9fp2+ | -| ClickHouse | [dbt-clickhouse](https://github.com/ClickHouse/dbt-clickhouse) | | | | Clickhouse | [Clickhouse Profile](clickhouse-profile) | [Clickhouse Configs](clickhouse-configs) | [#db-redshift](https://getdbt.slack.com/archives/C01DRQ178LQ) | | -| Exasol Analytics | [dbt-exasol](https://github.com/tglunde/dbt-exasol) | | | | Community | [Exasol Profile](exasol-profile) | | n/a | Exasol 6.x and later | -| Firebolt | [dbt-firebolt](https://github.com/firebolt-db/dbt-firebolt) | | :warning: | | Firebolt | [Firebolt Profile](firebolt-profile) | [Firebolt Configs](firebolt-configs) | [#db-firebolt](https://getdbt.slack.com/archives/C02PYT5CXN0) | | -| AWS Glue | [dbt-glue](https://github.com/aws-samples/dbt-glue) | | | | AWS | [Glue Profile](glue-profile) | [Glue Configs](glue-configs) | [#db-glue](https://getdbt.slack.com/archives/C02R4HSMBAT) | Glue 2.0+ | -| Hive | [dbt-hive](https://github.com/cloudera/dbt-hive) | | | | Cloudera | [Hive Profile](hive-profile) | [Hive Configs](hive-configs) | [#db-hive](https://getdbt.slack.com/archives/C0401DTNSKW) | | -| Impala | [dbt-impala](https://github.com/cloudera/dbt-impala) | | | | Cloudera | [Impala Profile](impala-profile) | [Impala Configs](impala-configs) | [#db-impala](https://getdbt.slack.com/archives/C03K2PTHHTP) | | -| iomete | [dbt-iomete](https://github.com/iomete/dbt-iomete) | | | | Iomete | [iomete Profile](iomete-profile) | | [#db-iomete](https://getdbt.slack.com/archives/C03JFG22EP9) | | -| Layer Bigquery | [dbt-layer](https://github.com/layerai/dbt-layer) | | | | Layer AI | [Layer Profile](layer-profile) | | [#tools-layer](https://getdbt.slack.com/archives/C03STA39TFE) | | -| Materialize | [dbt-materialize](https://github.com/MaterializeInc/materialize/blob/main/misc/dbt-materialize) | | :warning: | | Materialize | [Materialize Profile](materialize-profile) | [Materialize Configs](materialize-configs) | [#db-materialize](https://getdbt.slack.com/archives/C01PWAH41A5) | | -| MindsDB | [dbt-mindsdb](https://github.com/mindsdb/dbt-mindsdb) | | | | MindsDB | [MindsDB Profile](mindsdb-profile) | [MindsDB Configs](mindsdb-configs) | n/a | | -| MySQL | [dbt-mysql](https://github.com/dbeatty10/dbt-mysql) | | | | Community | [MySQL Profile](mysql-profile) | | [#db-mysql-family](https://getdbt.slack.com/archives/C03BK0SHC64) | MySQL 5.7 and 8.0 | -| Oracle | [dbt-oracle](https://github.com/oracle/dbt-oracle) | | | | Oracle | [Oracle Profile](oracle-profile) | | [#db-oracle](https://getdbt.slack.com/archives/C01PWH4TXLY) | | -| Rockset | [dbt-rockset](https://github.com/rockset/dbt-rockset) | | :warning: | | Rockset | [Rockset Profile](rockset-profile) | | [#db-rockset](https://getdbt.slack.com/archives/C02J7AZUAMN) | | -| SingleStore | [dbt-singlestore](https://github.com/memsql/dbt-singlestore) | | | | Single Store | [SingleStore Profile](singlestore-profile) | | [#db-singlestore](https://getdbt.slack.com/archives/C02V2QHFF7U) | | -| Teradata | [dbt-teradata](https://github.com/teradata/dbt-teradata) | | | | Teradata | [Teradata Profile](teradata-profile) | [Teradata Configs](teradata-configs) | [#db-teradata](https://getdbt.slack.com/archives/C027B6BHMT3) | | -| TiDB | [dbt-tidb](https://github.com/pingcap/dbt-tidb) | | | | PingCAP | [TiDB Profile](tidb-profile) | | [#db-tidb](https://getdbt.slack.com/archives/C03CC86R1NY) | | -| SQL Server & Azure SQL | [dbt-sqlserver](https://github.com/dbt-msft/dbt-sqlserver/) | | | | Community | [SQL Server Profile](mssql-profile) | [SQL Server Configs](mssql-configs) | [#db-sqlserver](https://getdbt.slack.com/archives/CMRMDDQ9W) | SQL Server 2016 and later | -| Azure Synapse | [dbt-synapse](https://github.com/dbt-msft/dbt-synapse) | | | | Community | [Synapse Profile](azuresynapse-profile) | [Synapse Configs](azuresynapse-configs) | [#db-synapse](https://getdbt.slack.com/archives/C01DRQ178LQ) | Azure Synapse 10+ | -| Dremio | [dbt-dremio](https://github.com/fabrice-etanchaud/dbt-dremio/) | | | | Community | [Dremio Profile](dremio-profile) | | n/a | Dremio 4.7+ | -| Athena | [dbt-athena](https://github.com/Tomme/dbt-athena) | | | | Community | [Athena Profile](athena-profile) | | [#db-athena](https://getdbt.slack.com/archives/C013MLFR7BQ) | Athena engine version 2 | -| Vertica | [dbt-vertica](https://github.com/ahedengren/dbt-vertica) | | | | Community | [Vertica Profile](vertica-profile) | | n/a | Vertica 10.0+ | -| Greenplum | [dbt-greenplum](https://github.com/markporoshin/dbt-greenplum) | | | | Community | [Greenplum Profile](greenplum-profile) | [Greenplum Configs](greenplum-configs) | n/a | Greenplum 6.0+ | -| DuckDB | [dbt-duckdb](https://github.com/jwills/dbt-duckdb/) | | | | Community | [DuckDB Profile](duckdb-profile) | | [#db-duckdb](https://getdbt.slack.com/archives/C039D1J1LA2) | DuckDB 0.3.2 | -| SQLite | [dbt-sqlite](https://github.com/codeforkjeff/dbt-sqlite) | | | | Community | [SQLite Profile](sqlite-profile) | | n/a | SQlite Version 3.0+ | +If you see something missing from the lists above, and you're interested in developing an integration, read more about adapters and how they're developed in the ["Adapter Development"](/docs/contributing/adapter-development) section. +If you have a new adapter, please add it to this list using a pull request! See [Documenting your adapter](5-documenting-a-new-adapter) for more information. [^1]: Here are the two different adapters. Use the PyPI package name when installing with `pip` From 3ced8e6f0adf71142c7d52c1c7cb5766772f058f Mon Sep 17 00:00:00 2001 From: Anders Swanson Date: Tue, 20 Sep 2022 12:08:45 -0400 Subject: [PATCH 056/130] maintainer least important --- website/docs/docs/supported-data-platforms.md | 74 +++++++++---------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/website/docs/docs/supported-data-platforms.md b/website/docs/docs/supported-data-platforms.md index d1d8f9fb5d8..5a25f53887b 100644 --- a/website/docs/docs/supported-data-platforms.md +++ b/website/docs/docs/supported-data-platforms.md @@ -40,16 +40,16 @@ Note that, while no community plugins are currently supported in dbt Cloud, we e ### Verified Adapters -| Data Platform | Adapter Repository | latest verified version | Cloud support | Maintained By | Profile Setup | Configuration | Slack Channel | -| ----------------- | -------------------------------------------------------------- | ------------------------ | ------------------ | ------------- | ---------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------------------- | -| AlloyDB | [dbt-postgres](https://github.com/dbt-labs/dbt-postgres) | (same as `dbt-postgres`) | :white_check_mark: | n/a | [AlloyDB Profile](alloydb-profile) | | [#db-postgres](https://getdbt.slack.com/archives/C0172G2E273) | -| BigQuery | [dbt-bigquery](https://github.com/dbt-labs/dbt-bigquery) | 1.2.0 | :white_check_mark: | dbt Labs | [BigQuery Profile](bigquery-profile) | [BigQuery Configs](bigquery-configs) | [#db-bigquery](https://getdbt.slack.com/archives/C99SNSRTK) | -| Databricks | [dbt-databricks](https://github.com/databricks/dbt-databricks) | 1.2.0 :construction: | | Databricks | [Databricks Profile](databricks-profile) | [Databricks Configs](spark-configs#databricks-configuration) | [#db-databricks-and-spark](https://getdbt.slack.com/archives/C01DRQ178LQ) | -| Postgres | [dbt-postgres](https://github.com/dbt-labs/dbt-postgres) | 1.2.0 | :white_check_mark: | dbt Labs | [Postgres Profile](postgres-profile) | | [#db-postgres](https://getdbt.slack.com/archives/C0172G2E273) | -| Redshift | [dbt-redshift](https://github.com/dbt-labs/dbt-redshift) | 1.2.0 | :white_check_mark: | dbt Labs | [Redshift Profile](redshift-profile) | [Redshift Configs](redshift-configs) | [#db-redshift](https://getdbt.slack.com/archives/C01DRQ178LQ) | -| Snowflake | [dbt-snowflake](https://github.com/dbt-labs/dbt-snowflake) | 1.2.0 | :white_check_mark: | dbt Labs | [Snowflake Profile](snowflake-profile) | [Snowflake Configs](snowflake-configs) | [#db-snowflake](https://getdbt.slack.com/archives/C01DRQ178LQ) | -| Apache Spark | [dbt-spark](https://github.com/dbt-labs/dbt-spark) | 1.2.0 | :white_check_mark: | dbt Labs | [Spark Profile](spark-profile) | [Spark Configs](spark-configs) | [#db-databricks-and-spark](https://getdbt.slack.com/archives/C01DRQ178LQ) | -| Starburst & Trino | [dbt-trino](https://github.com/starburstdata/dbt-trino) | 1.2.0 :construction: | | Starburst | [Trino Profile](trino-profile) | | [#db-presto-trino](https://getdbt.slack.com/archives/C013MLFR7BQ) | +| Data Platform | Adapter Repository | latest verified version | Cloud support | Profile Setup | Configuration | Slack Channel | Maintained By | +| ----------------- | -------------------------------------------------------------- | ------------------------ | ------------------ | ---------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------------------- | ------------- | +| AlloyDB | [dbt-postgres](https://github.com/dbt-labs/dbt-postgres) | (same as `dbt-postgres`) | :white_check_mark: | [AlloyDB Profile](alloydb-profile) | | [#db-postgres](https://getdbt.slack.com/archives/C0172G2E273) | n/a | +| BigQuery | [dbt-bigquery](https://github.com/dbt-labs/dbt-bigquery) | 1.2.0 | :white_check_mark: | [BigQuery Profile](bigquery-profile) | [BigQuery Configs](bigquery-configs) | [#db-bigquery](https://getdbt.slack.com/archives/C99SNSRTK) | dbt Labs | +| Databricks | [dbt-databricks](https://github.com/databricks/dbt-databricks) | 1.2.0 :construction: | | [Databricks Profile](databricks-profile) | [Databricks Configs](spark-configs#databricks-configuration) | [#db-databricks-and-spark](https://getdbt.slack.com/archives/C01DRQ178LQ) | Databricks | +| Postgres | [dbt-postgres](https://github.com/dbt-labs/dbt-postgres) | 1.2.0 | :white_check_mark: | [Postgres Profile](postgres-profile) | | [#db-postgres](https://getdbt.slack.com/archives/C0172G2E273) | dbt Labs | +| Redshift | [dbt-redshift](https://github.com/dbt-labs/dbt-redshift) | 1.2.0 | :white_check_mark: | [Redshift Profile](redshift-profile) | [Redshift Configs](redshift-configs) | [#db-redshift](https://getdbt.slack.com/archives/C01DRQ178LQ) | dbt Labs | +| Snowflake | [dbt-snowflake](https://github.com/dbt-labs/dbt-snowflake) | 1.2.0 | :white_check_mark: | [Snowflake Profile](snowflake-profile) | [Snowflake Configs](snowflake-configs) | [#db-snowflake](https://getdbt.slack.com/archives/C01DRQ178LQ) | dbt Labs | +| Apache Spark | [dbt-spark](https://github.com/dbt-labs/dbt-spark) | 1.2.0 | :white_check_mark: | [Spark Profile](spark-profile) | [Spark Configs](spark-configs) | [#db-databricks-and-spark](https://getdbt.slack.com/archives/C01DRQ178LQ) | dbt Labs | +| Starburst & Trino | [dbt-trino](https://github.com/starburstdata/dbt-trino) | 1.2.0 :construction: | | [Trino Profile](trino-profile) | | [#db-presto-trino](https://getdbt.slack.com/archives/C013MLFR7BQ) | Starburst | ### Community Adapters @@ -58,33 +58,33 @@ Community-supported plugins are works in progress, and anyone is welcome to cont - Join both the dedicated #adapter-ecosystem channel in [dbt Slack](https://community.getdbt.com/) and the channel for your adapter's data store (e.g. #db-sqlserver, #db-athena) - Check out the open issues in the plugin's source repository -| Data Platform | Adapter Repository | Maintained By | Profile Setup | Configuration | Slack Channel | Notes | -| ---------------------- | ----------------------------------------------------------------------------------------------- | ------------- | ------------------------------------------ | ------------------------------------------ | ----------------------------------------------------------------- | ------------------------- | -| Athena | [dbt-athena](https://github.com/Tomme/dbt-athena) | Community | [Athena Profile](athena-profile) | | [#db-athena](https://getdbt.slack.com/archives/C013MLFR7BQ) | Athena engine version 2 | -| ClickHouse | [dbt-clickhouse](https://github.com/ClickHouse/dbt-clickhouse) | Clickhouse | [Clickhouse Profile](clickhouse-profile) | [Clickhouse Configs](clickhouse-configs) | [#db-redshift](https://getdbt.slack.com/archives/C01DRQ178LQ) | | -| IBM DB2 | [dbt-ibmdb2](https://github.com/aurany/dbt-ibmdb2) | Community | [DB2 Profile](ibmdb2-profile) | | n/a | IBM DB2 V9fp2+ | -| DuckDB | [dbt-duckdb](https://github.com/jwills/dbt-duckdb/) | Community | [DuckDB Profile](duckdb-profile) | | [#db-duckdb](https://getdbt.slack.com/archives/C039D1J1LA2) | DuckDB 0.3.2 | -| Dremio | [dbt-dremio](https://github.com/fabrice-etanchaud/dbt-dremio/) | Community | [Dremio Profile](dremio-profile) | | n/a | Dremio 4.7+ | -| Exasol Analytics | [dbt-exasol](https://github.com/tglunde/dbt-exasol) | Community | [Exasol Profile](exasol-profile) | | n/a | Exasol 6.x and later | -| Firebolt | [dbt-firebolt](https://github.com/firebolt-db/dbt-firebolt) | Firebolt | [Firebolt Profile](firebolt-profile) | [Firebolt Configs](firebolt-configs) | [#db-firebolt](https://getdbt.slack.com/archives/C02PYT5CXN0) | | -| AWS Glue | [dbt-glue](https://github.com/aws-samples/dbt-glue) | AWS | [Glue Profile](glue-profile) | [Glue Configs](glue-configs) | [#db-glue](https://getdbt.slack.com/archives/C02R4HSMBAT) | Glue 2.0+ | -| Greenplum | [dbt-greenplum](https://github.com/markporoshin/dbt-greenplum) | Community | [Greenplum Profile](greenplum-profile) | [Greenplum Configs](greenplum-configs) | n/a | Greenplum 6.0+ | -| Hive | [dbt-hive](https://github.com/cloudera/dbt-hive) | Cloudera | [Hive Profile](hive-profile) | [Hive Configs](hive-configs) | [#db-hive](https://getdbt.slack.com/archives/C0401DTNSKW) | | -| Impala | [dbt-impala](https://github.com/cloudera/dbt-impala) | Cloudera | [Impala Profile](impala-profile) | [Impala Configs](impala-configs) | [#db-impala](https://getdbt.slack.com/archives/C03K2PTHHTP) | | -| iomete | [dbt-iomete](https://github.com/iomete/dbt-iomete) | Iomete | [iomete Profile](iomete-profile) | | [#db-iomete](https://getdbt.slack.com/archives/C03JFG22EP9) | | -| Layer Bigquery | [dbt-layer](https://github.com/layerai/dbt-layer) | Layer AI | [Layer Profile](layer-profile) | | [#tools-layer](https://getdbt.slack.com/archives/C03STA39TFE) | | -| Materialize | [dbt-materialize](https://github.com/MaterializeInc/materialize/blob/main/misc/dbt-materialize) | Materialize | [Materialize Profile](materialize-profile) | [Materialize Configs](materialize-configs) | [#db-materialize](https://getdbt.slack.com/archives/C01PWAH41A5) | | -| MindsDB | [dbt-mindsdb](https://github.com/mindsdb/dbt-mindsdb) | MindsDB | [MindsDB Profile](mindsdb-profile) | [MindsDB Configs](mindsdb-configs) | n/a | | -| MySQL | [dbt-mysql](https://github.com/dbeatty10/dbt-mysql) | Community | [MySQL Profile](mysql-profile) | | [#db-mysql-family](https://getdbt.slack.com/archives/C03BK0SHC64) | MySQL 5.7 and 8.0 | -| Oracle | [dbt-oracle](https://github.com/oracle/dbt-oracle) | Oracle | [Oracle Profile](oracle-profile) | | [#db-oracle](https://getdbt.slack.com/archives/C01PWH4TXLY) | | -| Rockset | [dbt-rockset](https://github.com/rockset/dbt-rockset) | Rockset | [Rockset Profile](rockset-profile) | | [#db-rockset](https://getdbt.slack.com/archives/C02J7AZUAMN) | | -| SingleStore | [dbt-singlestore](https://github.com/memsql/dbt-singlestore) | Single Store | [SingleStore Profile](singlestore-profile) | | [#db-singlestore](https://getdbt.slack.com/archives/C02V2QHFF7U) | | -| SQLite | [dbt-sqlite](https://github.com/codeforkjeff/dbt-sqlite) | Community | [SQLite Profile](sqlite-profile) | | n/a | SQlite Version 3.0+ | -| SQL Server & Azure SQL | [dbt-sqlserver](https://github.com/dbt-msft/dbt-sqlserver/) | Community | [SQL Server Profile](mssql-profile) | [SQL Server Configs](mssql-configs) | [#db-sqlserver](https://getdbt.slack.com/archives/CMRMDDQ9W) | SQL Server 2016 and later | -| Azure Synapse | [dbt-synapse](https://github.com/dbt-msft/dbt-synapse) | Community | [Synapse Profile](azuresynapse-profile) | [Synapse Configs](azuresynapse-configs) | [#db-synapse](https://getdbt.slack.com/archives/C01DRQ178LQ) | Azure Synapse 10+ | -| Teradata | [dbt-teradata](https://github.com/teradata/dbt-teradata) | Teradata | [Teradata Profile](teradata-profile) | [Teradata Configs](teradata-configs) | [#db-teradata](https://getdbt.slack.com/archives/C027B6BHMT3) | | -| TiDB | [dbt-tidb](https://github.com/pingcap/dbt-tidb) | PingCAP | [TiDB Profile](tidb-profile) | | [#db-tidb](https://getdbt.slack.com/archives/C03CC86R1NY) | | -| Vertica | [dbt-vertica](https://github.com/ahedengren/dbt-vertica) | Community | [Vertica Profile](vertica-profile) | | n/a | Vertica 10.0+ | +| Data Platform | Adapter Repository | Profile Setup | Configuration | Slack Channel | Maintained By | Notes | +| ---------------------- | ----------------------------------------------------------------------------------------------- | ------------------------------------------ | ------------------------------------------ | ----------------------------------------------------------------- | ------------- | ------------------------- | +| Athena | [dbt-athena](https://github.com/Tomme/dbt-athena) | [Athena Profile](athena-profile) | | [#db-athena](https://getdbt.slack.com/archives/C013MLFR7BQ) | Community | Athena engine version 2 | +| ClickHouse | [dbt-clickhouse](https://github.com/ClickHouse/dbt-clickhouse) | [Clickhouse Profile](clickhouse-profile) | [Clickhouse Configs](clickhouse-configs) | [#db-redshift](https://getdbt.slack.com/archives/C01DRQ178LQ) | Clickhouse | | +| IBM DB2 | [dbt-ibmdb2](https://github.com/aurany/dbt-ibmdb2) | [DB2 Profile](ibmdb2-profile) | | n/a | Community | IBM DB2 V9fp2+ | +| DuckDB | [dbt-duckdb](https://github.com/jwills/dbt-duckdb/) | [DuckDB Profile](duckdb-profile) | | [#db-duckdb](https://getdbt.slack.com/archives/C039D1J1LA2) | Community | DuckDB 0.3.2 | +| Dremio | [dbt-dremio](https://github.com/fabrice-etanchaud/dbt-dremio/) | [Dremio Profile](dremio-profile) | | n/a | Community | Dremio 4.7+ | +| Exasol Analytics | [dbt-exasol](https://github.com/tglunde/dbt-exasol) | [Exasol Profile](exasol-profile) | | n/a | Community | Exasol 6.x and later | +| Firebolt | [dbt-firebolt](https://github.com/firebolt-db/dbt-firebolt) | [Firebolt Profile](firebolt-profile) | [Firebolt Configs](firebolt-configs) | [#db-firebolt](https://getdbt.slack.com/archives/C02PYT5CXN0) | Firebolt | | +| AWS Glue | [dbt-glue](https://github.com/aws-samples/dbt-glue) | [Glue Profile](glue-profile) | [Glue Configs](glue-configs) | [#db-glue](https://getdbt.slack.com/archives/C02R4HSMBAT) | AWS | Glue 2.0+ | +| Greenplum | [dbt-greenplum](https://github.com/markporoshin/dbt-greenplum) | [Greenplum Profile](greenplum-profile) | [Greenplum Configs](greenplum-configs) | n/a | Community | Greenplum 6.0+ | +| Hive | [dbt-hive](https://github.com/cloudera/dbt-hive) | [Hive Profile](hive-profile) | [Hive Configs](hive-configs) | [#db-hive](https://getdbt.slack.com/archives/C0401DTNSKW) | Cloudera | | +| Impala | [dbt-impala](https://github.com/cloudera/dbt-impala) | [Impala Profile](impala-profile) | [Impala Configs](impala-configs) | [#db-impala](https://getdbt.slack.com/archives/C03K2PTHHTP) | Cloudera | | +| iomete | [dbt-iomete](https://github.com/iomete/dbt-iomete) | [iomete Profile](iomete-profile) | | [#db-iomete](https://getdbt.slack.com/archives/C03JFG22EP9) | Iomete | | +| Layer Bigquery | [dbt-layer](https://github.com/layerai/dbt-layer) | [Layer Profile](layer-profile) | | [#tools-layer](https://getdbt.slack.com/archives/C03STA39TFE) | Layer AI | | +| Materialize | [dbt-materialize](https://github.com/MaterializeInc/materialize/blob/main/misc/dbt-materialize) | [Materialize Profile](materialize-profile) | [Materialize Configs](materialize-configs) | [#db-materialize](https://getdbt.slack.com/archives/C01PWAH41A5) | Materialize | | +| MindsDB | [dbt-mindsdb](https://github.com/mindsdb/dbt-mindsdb) | [MindsDB Profile](mindsdb-profile) | [MindsDB Configs](mindsdb-configs) | n/a | MindsDB | | +| MySQL | [dbt-mysql](https://github.com/dbeatty10/dbt-mysql) | [MySQL Profile](mysql-profile) | | [#db-mysql-family](https://getdbt.slack.com/archives/C03BK0SHC64) | Community | MySQL 5.7 and 8.0 | +| Oracle | [dbt-oracle](https://github.com/oracle/dbt-oracle) | [Oracle Profile](oracle-profile) | | [#db-oracle](https://getdbt.slack.com/archives/C01PWH4TXLY) | Oracle | | +| Rockset | [dbt-rockset](https://github.com/rockset/dbt-rockset) | [Rockset Profile](rockset-profile) | | [#db-rockset](https://getdbt.slack.com/archives/C02J7AZUAMN) | Rockset | | +| SingleStore | [dbt-singlestore](https://github.com/memsql/dbt-singlestore) | [SingleStore Profile](singlestore-profile) | | [#db-singlestore](https://getdbt.slack.com/archives/C02V2QHFF7U) | Single Store | | +| SQLite | [dbt-sqlite](https://github.com/codeforkjeff/dbt-sqlite) | [SQLite Profile](sqlite-profile) | | n/a | Community | SQlite Version 3.0+ | +| SQL Server & Azure SQL | [dbt-sqlserver](https://github.com/dbt-msft/dbt-sqlserver/) | [SQL Server Profile](mssql-profile) | [SQL Server Configs](mssql-configs) | [#db-sqlserver](https://getdbt.slack.com/archives/CMRMDDQ9W) | Community | SQL Server 2016 and later | +| Azure Synapse | [dbt-synapse](https://github.com/dbt-msft/dbt-synapse) | [Synapse Profile](azuresynapse-profile) | [Synapse Configs](azuresynapse-configs) | [#db-synapse](https://getdbt.slack.com/archives/C01DRQ178LQ) | Community | Azure Synapse 10+ | +| Teradata | [dbt-teradata](https://github.com/teradata/dbt-teradata) | [Teradata Profile](teradata-profile) | [Teradata Configs](teradata-configs) | [#db-teradata](https://getdbt.slack.com/archives/C027B6BHMT3) | Teradata | | +| TiDB | [dbt-tidb](https://github.com/pingcap/dbt-tidb) | [TiDB Profile](tidb-profile) | | [#db-tidb](https://getdbt.slack.com/archives/C03CC86R1NY) | PingCAP | | +| Vertica | [dbt-vertica](https://github.com/ahedengren/dbt-vertica) | [Vertica Profile](vertica-profile) | | n/a | Community | Vertica 10.0+ | ## Contributing to dbt-core adapters From 5d52e1a9f74932e72cc09d8f2b944adaac0392db Mon Sep 17 00:00:00 2001 From: Anders Swanson Date: Tue, 20 Sep 2022 12:08:53 -0400 Subject: [PATCH 057/130] table format --- website/docs/docs/supported-data-platforms.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/website/docs/docs/supported-data-platforms.md b/website/docs/docs/supported-data-platforms.md index 5a25f53887b..9dec55f1695 100644 --- a/website/docs/docs/supported-data-platforms.md +++ b/website/docs/docs/supported-data-platforms.md @@ -17,20 +17,20 @@ With two exceptions [^1], all adapters listed below can be installed from PyPI u We have two tiers for dbt-core adapters: "Verified" and "Community". -| Tier | Relevant adapters | -| --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Verified | The adapters:
      • maintained by dbt Labs as well as
      • partner-maintained adapters that have been verified by dbt Labs
      • | +| Tier | Relevant adapters | +| --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Verified | The adapters:
      • maintained by dbt Labs as well as
      • partner-maintained adapters that have been verified by dbt Labs
      • | | Community |
      • All other partner-maintained adapters as well as
      • all community adapters.
      • Community adapters in particular tend to be works-in-progress. Contributions from users are highly encouraged (see ["Contributing to a pre-existing adapter"](#contributing-to-a-pre-existing-adapter)) | ### Maintainers Who made and maintains and adapter is certainly relevant, but we recommend using an adapter's verification status to determine quality and health of an adapter. So far we have three categories of maintainers: -| Supported by | Description | -| ------------ | ------------------------------------------------------------------------------------------------------------------------------------- | -| dbt Labs | dbt Labs maintains a set of adapters for some of the most common databases, warehouses, and platforms. | -| Partner | These adapter plugins are built and maintained by the same people who build and maintain the complementary data technology | -| Community | These adapter plugins are contributed and maintained by members of the community 🌱 | +| Supported by | Description | +| ------------ | -------------------------------------------------------------------------------------------------------------------------- | +| dbt Labs | dbt Labs maintains a set of adapters for some of the most common databases, warehouses, and platforms. | +| Partner | These adapter plugins are built and maintained by the same people who build and maintain the complementary data technology | +| Community | These adapter plugins are contributed and maintained by members of the community 🌱 | Note that, while no community plugins are currently supported in dbt Cloud, we expect this to change in the near future. From 2c6d4930cecc2bdd7445a2a4541fe56cae18ff0c Mon Sep 17 00:00:00 2001 From: Anders Swanson Date: Tue, 20 Sep 2022 12:10:21 -0400 Subject: [PATCH 058/130] bahleted --- website/docs/docs/supported-data-platforms.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/website/docs/docs/supported-data-platforms.md b/website/docs/docs/supported-data-platforms.md index 9dec55f1695..688e777e82b 100644 --- a/website/docs/docs/supported-data-platforms.md +++ b/website/docs/docs/supported-data-platforms.md @@ -53,11 +53,6 @@ Note that, while no community plugins are currently supported in dbt Cloud, we e ### Community Adapters -Community-supported plugins are works in progress, and anyone is welcome to contribute by testing and writing code. If you're interested in contributing: - -- Join both the dedicated #adapter-ecosystem channel in [dbt Slack](https://community.getdbt.com/) and the channel for your adapter's data store (e.g. #db-sqlserver, #db-athena) -- Check out the open issues in the plugin's source repository - | Data Platform | Adapter Repository | Profile Setup | Configuration | Slack Channel | Maintained By | Notes | | ---------------------- | ----------------------------------------------------------------------------------------------- | ------------------------------------------ | ------------------------------------------ | ----------------------------------------------------------------- | ------------- | ------------------------- | | Athena | [dbt-athena](https://github.com/Tomme/dbt-athena) | [Athena Profile](athena-profile) | | [#db-athena](https://getdbt.slack.com/archives/C013MLFR7BQ) | Community | Athena engine version 2 | From 8da600efeca6d6e8cc10f8b8aec4520b54b94507 Mon Sep 17 00:00:00 2001 From: Anders Swanson Date: Tue, 20 Sep 2022 12:38:18 -0400 Subject: [PATCH 059/130] supported version -> profile page --- website/docs/docs/supported-data-platforms.md | 54 +++++++++---------- .../warehouse-profiles/alloydb-profile.md | 9 ++-- .../warehouse-profiles/athena-profile.md | 1 + .../warehouse-profiles/dremio-profile.md | 1 + .../warehouse-profiles/exasol-profile.md | 1 + .../warehouse-profiles/glue-profile.md | 1 + .../warehouse-profiles/ibmdb2-profile.md | 1 + .../warehouse-profiles/mssql-profile.md | 1 + .../warehouse-profiles/mysql-profile.md | 1 + .../warehouse-profiles/sqlite-profile.md | 1 + .../warehouse-profiles/vertica-profile.md | 1 + 11 files changed, 41 insertions(+), 31 deletions(-) diff --git a/website/docs/docs/supported-data-platforms.md b/website/docs/docs/supported-data-platforms.md index 688e777e82b..4ef5e5fa5bc 100644 --- a/website/docs/docs/supported-data-platforms.md +++ b/website/docs/docs/supported-data-platforms.md @@ -53,33 +53,33 @@ Note that, while no community plugins are currently supported in dbt Cloud, we e ### Community Adapters -| Data Platform | Adapter Repository | Profile Setup | Configuration | Slack Channel | Maintained By | Notes | -| ---------------------- | ----------------------------------------------------------------------------------------------- | ------------------------------------------ | ------------------------------------------ | ----------------------------------------------------------------- | ------------- | ------------------------- | -| Athena | [dbt-athena](https://github.com/Tomme/dbt-athena) | [Athena Profile](athena-profile) | | [#db-athena](https://getdbt.slack.com/archives/C013MLFR7BQ) | Community | Athena engine version 2 | -| ClickHouse | [dbt-clickhouse](https://github.com/ClickHouse/dbt-clickhouse) | [Clickhouse Profile](clickhouse-profile) | [Clickhouse Configs](clickhouse-configs) | [#db-redshift](https://getdbt.slack.com/archives/C01DRQ178LQ) | Clickhouse | | -| IBM DB2 | [dbt-ibmdb2](https://github.com/aurany/dbt-ibmdb2) | [DB2 Profile](ibmdb2-profile) | | n/a | Community | IBM DB2 V9fp2+ | -| DuckDB | [dbt-duckdb](https://github.com/jwills/dbt-duckdb/) | [DuckDB Profile](duckdb-profile) | | [#db-duckdb](https://getdbt.slack.com/archives/C039D1J1LA2) | Community | DuckDB 0.3.2 | -| Dremio | [dbt-dremio](https://github.com/fabrice-etanchaud/dbt-dremio/) | [Dremio Profile](dremio-profile) | | n/a | Community | Dremio 4.7+ | -| Exasol Analytics | [dbt-exasol](https://github.com/tglunde/dbt-exasol) | [Exasol Profile](exasol-profile) | | n/a | Community | Exasol 6.x and later | -| Firebolt | [dbt-firebolt](https://github.com/firebolt-db/dbt-firebolt) | [Firebolt Profile](firebolt-profile) | [Firebolt Configs](firebolt-configs) | [#db-firebolt](https://getdbt.slack.com/archives/C02PYT5CXN0) | Firebolt | | -| AWS Glue | [dbt-glue](https://github.com/aws-samples/dbt-glue) | [Glue Profile](glue-profile) | [Glue Configs](glue-configs) | [#db-glue](https://getdbt.slack.com/archives/C02R4HSMBAT) | AWS | Glue 2.0+ | -| Greenplum | [dbt-greenplum](https://github.com/markporoshin/dbt-greenplum) | [Greenplum Profile](greenplum-profile) | [Greenplum Configs](greenplum-configs) | n/a | Community | Greenplum 6.0+ | -| Hive | [dbt-hive](https://github.com/cloudera/dbt-hive) | [Hive Profile](hive-profile) | [Hive Configs](hive-configs) | [#db-hive](https://getdbt.slack.com/archives/C0401DTNSKW) | Cloudera | | -| Impala | [dbt-impala](https://github.com/cloudera/dbt-impala) | [Impala Profile](impala-profile) | [Impala Configs](impala-configs) | [#db-impala](https://getdbt.slack.com/archives/C03K2PTHHTP) | Cloudera | | -| iomete | [dbt-iomete](https://github.com/iomete/dbt-iomete) | [iomete Profile](iomete-profile) | | [#db-iomete](https://getdbt.slack.com/archives/C03JFG22EP9) | Iomete | | -| Layer Bigquery | [dbt-layer](https://github.com/layerai/dbt-layer) | [Layer Profile](layer-profile) | | [#tools-layer](https://getdbt.slack.com/archives/C03STA39TFE) | Layer AI | | -| Materialize | [dbt-materialize](https://github.com/MaterializeInc/materialize/blob/main/misc/dbt-materialize) | [Materialize Profile](materialize-profile) | [Materialize Configs](materialize-configs) | [#db-materialize](https://getdbt.slack.com/archives/C01PWAH41A5) | Materialize | | -| MindsDB | [dbt-mindsdb](https://github.com/mindsdb/dbt-mindsdb) | [MindsDB Profile](mindsdb-profile) | [MindsDB Configs](mindsdb-configs) | n/a | MindsDB | | -| MySQL | [dbt-mysql](https://github.com/dbeatty10/dbt-mysql) | [MySQL Profile](mysql-profile) | | [#db-mysql-family](https://getdbt.slack.com/archives/C03BK0SHC64) | Community | MySQL 5.7 and 8.0 | -| Oracle | [dbt-oracle](https://github.com/oracle/dbt-oracle) | [Oracle Profile](oracle-profile) | | [#db-oracle](https://getdbt.slack.com/archives/C01PWH4TXLY) | Oracle | | -| Rockset | [dbt-rockset](https://github.com/rockset/dbt-rockset) | [Rockset Profile](rockset-profile) | | [#db-rockset](https://getdbt.slack.com/archives/C02J7AZUAMN) | Rockset | | -| SingleStore | [dbt-singlestore](https://github.com/memsql/dbt-singlestore) | [SingleStore Profile](singlestore-profile) | | [#db-singlestore](https://getdbt.slack.com/archives/C02V2QHFF7U) | Single Store | | -| SQLite | [dbt-sqlite](https://github.com/codeforkjeff/dbt-sqlite) | [SQLite Profile](sqlite-profile) | | n/a | Community | SQlite Version 3.0+ | -| SQL Server & Azure SQL | [dbt-sqlserver](https://github.com/dbt-msft/dbt-sqlserver/) | [SQL Server Profile](mssql-profile) | [SQL Server Configs](mssql-configs) | [#db-sqlserver](https://getdbt.slack.com/archives/CMRMDDQ9W) | Community | SQL Server 2016 and later | -| Azure Synapse | [dbt-synapse](https://github.com/dbt-msft/dbt-synapse) | [Synapse Profile](azuresynapse-profile) | [Synapse Configs](azuresynapse-configs) | [#db-synapse](https://getdbt.slack.com/archives/C01DRQ178LQ) | Community | Azure Synapse 10+ | -| Teradata | [dbt-teradata](https://github.com/teradata/dbt-teradata) | [Teradata Profile](teradata-profile) | [Teradata Configs](teradata-configs) | [#db-teradata](https://getdbt.slack.com/archives/C027B6BHMT3) | Teradata | | -| TiDB | [dbt-tidb](https://github.com/pingcap/dbt-tidb) | [TiDB Profile](tidb-profile) | | [#db-tidb](https://getdbt.slack.com/archives/C03CC86R1NY) | PingCAP | | -| Vertica | [dbt-vertica](https://github.com/ahedengren/dbt-vertica) | [Vertica Profile](vertica-profile) | | n/a | Community | Vertica 10.0+ | +| Data Platform | Adapter Repository | Profile Setup | Configuration | Slack Channel | Maintained By | +| ---------------------- | ----------------------------------------------------------------------------------------------- | ------------------------------------------ | ------------------------------------------ | ----------------------------------------------------------------- | ------------- | +| Athena | [dbt-athena](https://github.com/Tomme/dbt-athena) | [Athena Profile](athena-profile) | | [#db-athena](https://getdbt.slack.com/archives/C013MLFR7BQ) | Community | +| ClickHouse | [dbt-clickhouse](https://github.com/ClickHouse/dbt-clickhouse) | [Clickhouse Profile](clickhouse-profile) | [Clickhouse Configs](clickhouse-configs) | [#db-redshift](https://getdbt.slack.com/archives/C01DRQ178LQ) | Clickhouse | +| IBM DB2 | [dbt-ibmdb2](https://github.com/aurany/dbt-ibmdb2) | [DB2 Profile](ibmdb2-profile) | | n/a | Community | +| DuckDB | [dbt-duckdb](https://github.com/jwills/dbt-duckdb/) | [DuckDB Profile](duckdb-profile) | | [#db-duckdb](https://getdbt.slack.com/archives/C039D1J1LA2) | Community | +| Dremio | [dbt-dremio](https://github.com/fabrice-etanchaud/dbt-dremio/) | [Dremio Profile](dremio-profile) | | n/a | Community | +| Exasol Analytics | [dbt-exasol](https://github.com/tglunde/dbt-exasol) | [Exasol Profile](exasol-profile) | | n/a | Community | +| Firebolt | [dbt-firebolt](https://github.com/firebolt-db/dbt-firebolt) | [Firebolt Profile](firebolt-profile) | [Firebolt Configs](firebolt-configs) | [#db-firebolt](https://getdbt.slack.com/archives/C02PYT5CXN0) | Firebolt | +| AWS Glue | [dbt-glue](https://github.com/aws-samples/dbt-glue) | [Glue Profile](glue-profile) | [Glue Configs](glue-configs) | [#db-glue](https://getdbt.slack.com/archives/C02R4HSMBAT) | AWS | +| Greenplum | [dbt-greenplum](https://github.com/markporoshin/dbt-greenplum) | [Greenplum Profile](greenplum-profile) | [Greenplum Configs](greenplum-configs) | n/a | Community | +| Hive | [dbt-hive](https://github.com/cloudera/dbt-hive) | [Hive Profile](hive-profile) | [Hive Configs](hive-configs) | [#db-hive](https://getdbt.slack.com/archives/C0401DTNSKW) | Cloudera | +| Impala | [dbt-impala](https://github.com/cloudera/dbt-impala) | [Impala Profile](impala-profile) | [Impala Configs](impala-configs) | [#db-impala](https://getdbt.slack.com/archives/C03K2PTHHTP) | Cloudera | +| iomete | [dbt-iomete](https://github.com/iomete/dbt-iomete) | [iomete Profile](iomete-profile) | | [#db-iomete](https://getdbt.slack.com/archives/C03JFG22EP9) | Iomete | +| Layer Bigquery | [dbt-layer](https://github.com/layerai/dbt-layer) | [Layer Profile](layer-profile) | | [#tools-layer](https://getdbt.slack.com/archives/C03STA39TFE) | Layer AI | +| Materialize | [dbt-materialize](https://github.com/MaterializeInc/materialize/blob/main/misc/dbt-materialize) | [Materialize Profile](materialize-profile) | [Materialize Configs](materialize-configs) | [#db-materialize](https://getdbt.slack.com/archives/C01PWAH41A5) | Materialize | +| MindsDB | [dbt-mindsdb](https://github.com/mindsdb/dbt-mindsdb) | [MindsDB Profile](mindsdb-profile) | [MindsDB Configs](mindsdb-configs) | n/a | MindsDB | +| MySQL | [dbt-mysql](https://github.com/dbeatty10/dbt-mysql) | [MySQL Profile](mysql-profile) | | [#db-mysql-family](https://getdbt.slack.com/archives/C03BK0SHC64) | Community | +| Oracle | [dbt-oracle](https://github.com/oracle/dbt-oracle) | [Oracle Profile](oracle-profile) | | [#db-oracle](https://getdbt.slack.com/archives/C01PWH4TXLY) | Oracle | +| Rockset | [dbt-rockset](https://github.com/rockset/dbt-rockset) | [Rockset Profile](rockset-profile) | | [#db-rockset](https://getdbt.slack.com/archives/C02J7AZUAMN) | Rockset | +| SingleStore | [dbt-singlestore](https://github.com/memsql/dbt-singlestore) | [SingleStore Profile](singlestore-profile) | | [#db-singlestore](https://getdbt.slack.com/archives/C02V2QHFF7U) | Single Store | +| SQLite | [dbt-sqlite](https://github.com/codeforkjeff/dbt-sqlite) | [SQLite Profile](sqlite-profile) | | n/a | Community | +| SQL Server & Azure SQL | [dbt-sqlserver](https://github.com/dbt-msft/dbt-sqlserver/) | [SQL Server Profile](mssql-profile) | [SQL Server Configs](mssql-configs) | [#db-sqlserver](https://getdbt.slack.com/archives/CMRMDDQ9W) | Community | +| Azure Synapse | [dbt-synapse](https://github.com/dbt-msft/dbt-synapse) | [Synapse Profile](azuresynapse-profile) | [Synapse Configs](azuresynapse-configs) | [#db-synapse](https://getdbt.slack.com/archives/C01DRQ178LQ) | Community | +| Teradata | [dbt-teradata](https://github.com/teradata/dbt-teradata) | [Teradata Profile](teradata-profile) | [Teradata Configs](teradata-configs) | [#db-teradata](https://getdbt.slack.com/archives/C027B6BHMT3) | Teradata | +| TiDB | [dbt-tidb](https://github.com/pingcap/dbt-tidb) | [TiDB Profile](tidb-profile) | | [#db-tidb](https://getdbt.slack.com/archives/C03CC86R1NY) | PingCAP | +| Vertica | [dbt-vertica](https://github.com/ahedengren/dbt-vertica) | [Vertica Profile](vertica-profile) | | n/a | Community | ## Contributing to dbt-core adapters diff --git a/website/docs/reference/warehouse-profiles/alloydb-profile.md b/website/docs/reference/warehouse-profiles/alloydb-profile.md index ed2101e9994..dd347210b0d 100644 --- a/website/docs/reference/warehouse-profiles/alloydb-profile.md +++ b/website/docs/reference/warehouse-profiles/alloydb-profile.md @@ -3,11 +3,12 @@ title: "AlloyDB Profile" --- ## Overview of AlloyDB support + **Maintained by:** N/A -**Author:** N/A -**dbt Cloud:** Supported -**dbt Slack channel** [Link to channel](https://getdbt.slack.com/archives/C0172G2E273) +**Author:** N/A +**dbt Cloud:** Supported +**dbt Slack channel** [Link to channel](https://getdbt.slack.com/archives/C0172G2E273) ## Profile Configuration -AlloyDB targets are configured exactly the same as [Postgres targets](postgres-profile.md#profile-configuration). \ No newline at end of file +AlloyDB targets are configured exactly the same as [Postgres targets](postgres-profile.md#profile-configuration). diff --git a/website/docs/reference/warehouse-profiles/athena-profile.md b/website/docs/reference/warehouse-profiles/athena-profile.md index cd7ba114dbc..7c83affada9 100644 --- a/website/docs/reference/warehouse-profiles/athena-profile.md +++ b/website/docs/reference/warehouse-profiles/athena-profile.md @@ -9,6 +9,7 @@ title: "Athena Profile" **Source:** [Github](https://github.com/Tomme/dbt-athena) **dbt Cloud:** Not Supported **dbt Slack channel** [Link to channel](https://getdbt.slack.com/archives/C013MLFR7BQ) +**Supported Version:** Athena engine version 2 The easiest way to install is to use pip: diff --git a/website/docs/reference/warehouse-profiles/dremio-profile.md b/website/docs/reference/warehouse-profiles/dremio-profile.md index d156f815117..6ebce8fa2c6 100644 --- a/website/docs/reference/warehouse-profiles/dremio-profile.md +++ b/website/docs/reference/warehouse-profiles/dremio-profile.md @@ -14,6 +14,7 @@ Some core functionality may be limited. If you're interested in contributing, ch **Source:** https://github.com/fabrice-etanchaud/dbt-dremio **Core version:** v0.18.0 and newer **dbt Cloud:** Not Supported +**Supported Version:** Dremio 4.7+ ![dbt-dremio stars](https://img.shields.io/github/stars/fabrice-etanchaud/dbt-dremio?style=for-the-badge) diff --git a/website/docs/reference/warehouse-profiles/exasol-profile.md b/website/docs/reference/warehouse-profiles/exasol-profile.md index 5155ece4007..3a427f0a2cb 100644 --- a/website/docs/reference/warehouse-profiles/exasol-profile.md +++ b/website/docs/reference/warehouse-profiles/exasol-profile.md @@ -14,6 +14,7 @@ Some core functionality may be limited. If you're interested in contributing, ch **Source:** https://github.com/tglunde/dbt-exasol **Core version:** v0.14.0 and newer **dbt Cloud:** Not Supported +**Supported Version:** Exasol 6.x and later ![dbt-exasol stars](https://img.shields.io/github/stars/tglunde/dbt-exasol?style=for-the-badge) diff --git a/website/docs/reference/warehouse-profiles/glue-profile.md b/website/docs/reference/warehouse-profiles/glue-profile.md index 3b56e95a7c5..05c7f168b3f 100644 --- a/website/docs/reference/warehouse-profiles/glue-profile.md +++ b/website/docs/reference/warehouse-profiles/glue-profile.md @@ -17,6 +17,7 @@ Some core functionality may be limited. If you're interested in contributing, ch **Core version:** v0.24.0 and newer **dbt Cloud:** Not Supported **dbt Slack channel** [Link to channel](https://getdbt.slack.com/archives/C02R4HSMBAT) +**Supported Version:** Glue 2.0+ ![dbt-glue stars](https://img.shields.io/github/stars/aws-samples/dbt-glue?style=for-the-badg) diff --git a/website/docs/reference/warehouse-profiles/ibmdb2-profile.md b/website/docs/reference/warehouse-profiles/ibmdb2-profile.md index c80131260b6..06e0009769c 100644 --- a/website/docs/reference/warehouse-profiles/ibmdb2-profile.md +++ b/website/docs/reference/warehouse-profiles/ibmdb2-profile.md @@ -15,6 +15,7 @@ Some core functionality may be limited. If you're interested in contributing, ch **Source:** [GitHub](https://github.com/aurany/dbt-ibmdb2) **Core version:** v1.0.4 **dbt Cloud:** Not Supported +**Supported Version:** IBM DB2 V9fp2+ ![dbt-ibmdb2 stars](https://img.shields.io/github/stars/aurany/dbt-ibmdb2?style=for-the-badge) ![latest version on PyPI](https://img.shields.io/pypi/v/dbt-ibmdb2?style=for-the-badge) diff --git a/website/docs/reference/warehouse-profiles/mssql-profile.md b/website/docs/reference/warehouse-profiles/mssql-profile.md index a4be34f2875..4e22b3fe68f 100644 --- a/website/docs/reference/warehouse-profiles/mssql-profile.md +++ b/website/docs/reference/warehouse-profiles/mssql-profile.md @@ -16,6 +16,7 @@ Some core functionality may be limited. If you're interested in contributing, ch **Core version:** v0.14.0 and newer **dbt Cloud:** Not Supported **dbt Slack channel:** [Link to channel](https://getdbt.slack.com/archives/CMRMDDQ9W) +**Supported Version:** SQL Server 2016 and later ![dbt-sqlserver stars](https://img.shields.io/github/stars/dbt-msft/dbt-sqlserver?style=for-the-badge) ![latest version on PyPI](https://img.shields.io/pypi/v/dbt-sqlserver?style=for-the-badge) diff --git a/website/docs/reference/warehouse-profiles/mysql-profile.md b/website/docs/reference/warehouse-profiles/mysql-profile.md index c0bc12483e9..9abf336f6dd 100644 --- a/website/docs/reference/warehouse-profiles/mysql-profile.md +++ b/website/docs/reference/warehouse-profiles/mysql-profile.md @@ -15,6 +15,7 @@ Some core functionality may be limited. If you're interested in contributing, ch **Source:** [GitHub](https://github.com/dbeatty10/dbt-mysql) **Core version:** v1.0.8 **dbt Cloud:** Not Supported +**Supported Version:** MySQL 5.7 and 8.0 ![dbt-mysql stars](https://img.shields.io/github/stars/dbeatty10/dbt-mysql?style=for-the-badge) ![latest version on PyPI](https://img.shields.io/pypi/v/dbt-mysql?style=for-the-badge) diff --git a/website/docs/reference/warehouse-profiles/sqlite-profile.md b/website/docs/reference/warehouse-profiles/sqlite-profile.md index 76278803ffa..c2614733d28 100644 --- a/website/docs/reference/warehouse-profiles/sqlite-profile.md +++ b/website/docs/reference/warehouse-profiles/sqlite-profile.md @@ -15,6 +15,7 @@ Some core functionality may be limited. If you're interested in contributing, ch **Source:** [GitHub](https://github.com/codeforkjeff/dbt-sqlite) **Core version:** v1.1.0 **dbt Cloud:** Not Supported +**Supported Version:** SQlite Version 3.0+ ![dbt-sqlite stars](https://img.shields.io/github/stars/codeforkjeff/dbt-sqlite?style=for-the-badge) ![latest version on PyPI](https://img.shields.io/pypi/v/dbt-sqlite?style=for-the-badge) diff --git a/website/docs/reference/warehouse-profiles/vertica-profile.md b/website/docs/reference/warehouse-profiles/vertica-profile.md index 5ce1b479976..a0e6d998b54 100644 --- a/website/docs/reference/warehouse-profiles/vertica-profile.md +++ b/website/docs/reference/warehouse-profiles/vertica-profile.md @@ -14,6 +14,7 @@ Some core functionality may be limited. If you're interested in contributing, ch **Source:** [Github](https://github.com/mpcarter/dbt-vertica) **Core version:** v0.21.0 and newer **dbt Cloud:** Not Supported +**Supported Version:** Vertica 10.0+ ![dbt-vertica stars](https://img.shields.io/github/stars/mpcarter/dbt-vertica) From 83d88d203f7c313d136d7004ae72f679c74d718d Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Tue, 20 Sep 2022 14:42:45 -0400 Subject: [PATCH 060/130] update nav items --- website/docusaurus.config.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js index 74f4984a8b1..a515d4d431e 100644 --- a/website/docusaurus.config.js +++ b/website/docusaurus.config.js @@ -114,13 +114,9 @@ var siteSettings = { position: 'right', items: [ { - label: 'Online courses', + label: 'Courses', href: 'https://courses.getdbt.com', }, - { - label: 'Live courses', - href: 'https://learn.getdbt.com/public', - }, { label: 'Guides', to: '/guides/getting-started', From ec1d269be628b7efbd7aad73a8a734a3fe57946f Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Wed, 21 Sep 2022 10:13:59 -0400 Subject: [PATCH 061/130] add class to create account nav link --- website/docusaurus.config.js | 1 + website/src/css/custom.css | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js index cd8b07c31a6..ace024e55f7 100644 --- a/website/docusaurus.config.js +++ b/website/docusaurus.config.js @@ -153,6 +153,7 @@ var siteSettings = { label: 'Create a Free Account', to: 'https://www.getdbt.com/signup/', position: 'right', + className: 'nav-create-account button button--primary', }, ], }, diff --git a/website/src/css/custom.css b/website/src/css/custom.css index cc3b1680408..bda9d226a4f 100644 --- a/website/src/css/custom.css +++ b/website/src/css/custom.css @@ -218,6 +218,10 @@ a.code-link:hover { justify-content: center; } +.navbar__link.nav-create-account { + color: var(--color-white); +} + .dropdown__link:hover { cursor: pointer; } From c018f2ce468e2ddee30bedd04fa2b24e11878255 Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Wed, 21 Sep 2022 10:20:08 -0400 Subject: [PATCH 062/130] adjust styles --- website/docusaurus.config.js | 2 +- website/src/css/custom.css | 14 +++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js index ace024e55f7..62209abfa40 100644 --- a/website/docusaurus.config.js +++ b/website/docusaurus.config.js @@ -150,7 +150,7 @@ var siteSettings = { // ] // }, { - label: 'Create a Free Account', + label: 'Create a free account', to: 'https://www.getdbt.com/signup/', position: 'right', className: 'nav-create-account button button--primary', diff --git a/website/src/css/custom.css b/website/src/css/custom.css index bda9d226a4f..cbcbc45072d 100644 --- a/website/src/css/custom.css +++ b/website/src/css/custom.css @@ -196,7 +196,7 @@ a.code-link:hover { .navbar__link { font-size: .875rem; - margin: var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal) 0; + margin: 0 var(--ifm-navbar-item-padding-horizontal) 0; padding: 0; border-bottom: 1px solid transparent; } @@ -218,8 +218,16 @@ a.code-link:hover { justify-content: center; } -.navbar__link.nav-create-account { +.navbar__items .navbar__link.nav-create-account { color: var(--color-white); + height: 30px; + align-self: auto; + padding: 0 12px; + margin-top: 0; + border: none; +} +.navbar__items .navbar__link.nav-create-account:hover { + background: var(--color-light-teal); } .dropdown__link:hover { @@ -638,7 +646,7 @@ div .toggle_src-components-faqs-styles-module { } .card.large .button:hover { - background: #fff; + background: var(--color-white); border-color: var(--color-white); color: var(--color-green-blue); } From bca56b3fa72e244fe0a67f0ceed113ae1be27a72 Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Wed, 21 Sep 2022 10:34:38 -0400 Subject: [PATCH 063/130] adjust nav order for right nav items --- website/src/css/custom.css | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/website/src/css/custom.css b/website/src/css/custom.css index cbcbc45072d..4c13c21abc5 100644 --- a/website/src/css/custom.css +++ b/website/src/css/custom.css @@ -224,12 +224,22 @@ a.code-link:hover { align-self: auto; padding: 0 12px; margin-top: 0; + margin-left: 0; border: none; + order: 3; } .navbar__items .navbar__link.nav-create-account:hover { background: var(--color-light-teal); } +/* Reorder search and darkmode toggle */ +.navbar__items.navbar__items--right div[class^="searchBox"] { + order: 2; +} +.navbar__items.navbar__items--right div[class^="toggle"] { + order: 4; +} + .dropdown__link:hover { cursor: pointer; } From e7bb3ec7fbbaeab56eb5cd80c4703767835f1c2e Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Wed, 21 Sep 2022 10:37:02 -0400 Subject: [PATCH 064/130] adjust dark-mode background color for searchbar on hover --- website/src/css/custom.css | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/website/src/css/custom.css b/website/src/css/custom.css index 4c13c21abc5..91f9769b33b 100644 --- a/website/src/css/custom.css +++ b/website/src/css/custom.css @@ -982,6 +982,12 @@ filter: opacity(.75); box-shadow: var(--docsearch-searchbox-shadow); border: 1px solid var(--ifm-link-color); } + + [data-theme='dark'] button.DocSearch-Button:active, + [data-theme='dark'] button.DocSearch-Button:focus, + [data-theme='dark'] button.DocSearch-Button:hover { + background: #ffffff10; + } button .DocSearch-Button-Placeholder { font-size: .875rem; From a932947c68577506e61ddec48c4dcac9f6acdd4f Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Wed, 21 Sep 2022 11:05:05 -0400 Subject: [PATCH 065/130] flip dark/light toggle icons --- website/src/css/custom.css | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/website/src/css/custom.css b/website/src/css/custom.css index 91f9769b33b..4332ff642ae 100644 --- a/website/src/css/custom.css +++ b/website/src/css/custom.css @@ -273,7 +273,19 @@ a.code-link:hover { margin-right: .75em; } -/* moon/sun icons for dark/light mode - HIDE UNTIL SWIZZLE - These styles get overridden on live site */ +/* moon/sun icons for dark/light mode */ +html[data-theme=light] svg[class^="lightToggleIcon_"] { + display: none; +} +html[data-theme=light] svg[class^="darkToggleIcon_"] { + display: block; +} +html[data-theme=dark] svg[class^="lightToggleIcon_"] { + display: block; +} +html[data-theme=dark] svg[class^="darkToggleIcon_"] { + display: none; +} /* input.toggleScreenReader_node_modules-\@docusaurus-theme-classic-lib-next-theme-ColorModeToggle-styles-module::after { width: 100%; height: 100%; From 5ba4c8de68b1a16e63268d8038760989f265f87b Mon Sep 17 00:00:00 2001 From: johnblust <97988576+johnblust@users.noreply.github.com> Date: Wed, 21 Sep 2022 11:10:03 -0400 Subject: [PATCH 066/130] add metadata frontmatter --- website/docs/terms/cte.md | 5 +++++ website/docs/terms/dag.md | 12 +++++++++++- website/docs/terms/data-extraction.md | 5 +++++ website/docs/terms/data-lineage.md | 5 +++++ website/docs/terms/data-warehouse.md | 5 +++++ website/docs/terms/dataframe.md | 5 +++++ website/docs/terms/ddl.md | 6 +++++- website/docs/terms/dimensional-modeling.md | 5 +++++ website/docs/terms/dml.md | 6 +++++- website/docs/terms/dry.md | 5 +++++ website/docs/terms/edw.md | 5 +++++ website/docs/terms/elt.md | 5 ++++- website/docs/terms/etl.md | 5 +++++ website/docs/terms/grain.md | 5 +++++ website/docs/terms/idempotent.md | 5 +++++ website/docs/terms/materialization.md | 6 ++++++ website/docs/terms/primary-key.md | 5 +++++ website/docs/terms/reverse-etl.md | 5 +++++ website/docs/terms/subquery.md | 4 ++++ website/docs/terms/surrogate-key.md | 5 +++++ 20 files changed, 105 insertions(+), 4 deletions(-) diff --git a/website/docs/terms/cte.md b/website/docs/terms/cte.md index 2ada466496d..e6fe678fce7 100644 --- a/website/docs/terms/cte.md +++ b/website/docs/terms/cte.md @@ -1,10 +1,15 @@ --- id: cte title: CTE in SQL +description: A CTE is a temporary result set that can be used in a SQL query. You can think of a CTE as a separate, smaller query within the larger query you’re building up. displayText: CTE hoverSnippet: A Common Table Expression (CTE) is a temporary result set that can be used in a SQL query. You can use CTEs to break up complex queries into simpler blocks of code that can connect and build on each other. --- + + CTE in SQL: Quite possibly the best thing to happen to SQL + + In a formal sense, a Common Table Expression (CTE), is a temporary result set that can be used in a SQL query. You can use CTEs to break up complex queries into simpler blocks of code that can connect and build on each other. In a less formal, more human-sense, you can think of a CTE as a separate, smaller query within the larger query you’re building up. Creating a CTE is essentially like making a temporary that you can access throughout the rest of the query you are writing. There are two-types of CTEs: recursive and non-recursive. This glossary focuses on non-recursive CTEs. diff --git a/website/docs/terms/dag.md b/website/docs/terms/dag.md index 0f4eaf1592b..21db57823e3 100644 --- a/website/docs/terms/dag.md +++ b/website/docs/terms/dag.md @@ -1,4 +1,14 @@ -# DAG +--- +id: dag +title: DAG +description: Data extraction is the process by which data is retrieved from multiple sources, often varying in volume and structure. +displayText: DAG +hoverSnippet: Data extraction is the process by which data is retrieved from multiple sources, often varying in volume and structure. +--- + + + What is a DAG and why is it important? - dbt Labs + A DAG is a **D**irected **A**cyclic **G**raph, a type of graph whose nodes are directionally related to each other and don’t form a directional closed loop. In the practice of analytics engineering, DAGs are often used to visually represent the relationships between your data models. diff --git a/website/docs/terms/data-extraction.md b/website/docs/terms/data-extraction.md index 1c7edbc64d6..ff2608e761c 100644 --- a/website/docs/terms/data-extraction.md +++ b/website/docs/terms/data-extraction.md @@ -1,10 +1,15 @@ --- id: data-extraction title: Data extraction +description: Data extraction is the process by which data is retrieved from multiple sources, often varying in volume and structure. displayText: data extraction hoverSnippet: Data extraction is the process by which data is retrieved from multiple sources, often varying in volume and structure. --- + + Data extraction: the first step of the ELT process + + There is no data work without data. So how do data teams get the data they need? Data extraction is the process by which data is retrieved from multiple sources, often varying in volume and structure. Most data extraction processes are followed by a loading process, where that extracted data is loaded into a central . To actually extract said data, teams will often rely on various [ETL tools](https://docs.getdbt.com/terms/elt#elt-tools) or create custom scripts to call API endpoints. Other times data teams may be forced to do some hacky work like manually making and dropping a CSV into an S3 bucket. Definitely a rarity. But not unheard of. diff --git a/website/docs/terms/data-lineage.md b/website/docs/terms/data-lineage.md index 778790e8211..9b813621357 100644 --- a/website/docs/terms/data-lineage.md +++ b/website/docs/terms/data-lineage.md @@ -1,10 +1,15 @@ --- id: data-lineage title: Data lineage +description: Data lineage provides a holistic view of how data moves through an organization, where it’s transformed and consumed. displayText: data lineage hoverSnippet: Data lineage provides a holistic view of how data moves through an organization, where it’s transformed and consumed. --- + + Data lineage: what it is and how to automate it - dbt Labs + + Data lineage provides a holistic view of how data moves through an organization, where it’s transformed and consumed. Overall, data lineage is a fundamental concept to understand in the practice of analytics engineering and modern data work. At a high level, a data lineage system typically provides data teams and consumers with one or both of the following resources: diff --git a/website/docs/terms/data-warehouse.md b/website/docs/terms/data-warehouse.md index f26b6ac7d9c..34f92ad07d4 100644 --- a/website/docs/terms/data-warehouse.md +++ b/website/docs/terms/data-warehouse.md @@ -1,10 +1,15 @@ --- id: data-warehouse title: Data warehouse +description: How have data warehouses evolved over the last 40 years? Explore the nuanced changes in use case since Inmon first coined the term. displayText: data warehouse hoverSnippet: A data warehouse is a data management system used for data storage and computing that allows for analytics activities such as transforming and sharing data. --- + + Data warehouses in the post-modern data stack - dbt Labs + + A data warehouse is a data management system used for data storage and computing that allows for analytics activities such as transforming and sharing data. It helps businesses to capture and store data from external sources. Analytics engineers and data analysts use it to query datasets using SQL, helping to transform them into powerful data models and reports. Data warehouses are the central source of truth for any modern data stack. Data is ingested, transformed, and shared to other tools from the warehouse. There are two main types of data warehouses — on-prem warehouses and cloud warehouses. An on-prem data warehouse is a physical location where companies need to maintain hardware and software in order to store data. A cloud data warehouse is available anywhere and doesn’t include a physical location that you need to access. In this arrangement, you pay to use the storage space and compute power that is provided and maintained by another company. diff --git a/website/docs/terms/dataframe.md b/website/docs/terms/dataframe.md index b6a24ad4060..3955d567aab 100644 --- a/website/docs/terms/dataframe.md +++ b/website/docs/terms/dataframe.md @@ -1,9 +1,14 @@ --- id: dataframe title: DataFrame +description: A DataFrame is a way of storing and manipulating tabular data in Python. They gained popularity first as a part of R and then as a part of pandas. displayText: dataframe hoverSnippet: A DataFrame is a two-dimensional data structure (rows and columns). It's the most common way of representing and interacting with large datasets in Python. --- + + What is a DataFrame in Python? - dbt Labs + + A DataFrame is a way of storing and manipulating tabular data in Python. DataFrames are often likened to tables with columns and rows that you could find in any , Google Sheet, or Excel workbook. A DataFrame entry in an analytics engineering glossary…what is happening? You’re reading this right. While SQL is the go-to programming language for most analytics engineering work, there are likely inevitable situations where you've found yourself writing some Python and using DataFrames. diff --git a/website/docs/terms/ddl.md b/website/docs/terms/ddl.md index 3a85954d6ed..c4324e75fa9 100644 --- a/website/docs/terms/ddl.md +++ b/website/docs/terms/ddl.md @@ -1,11 +1,15 @@ --- id: ddl title: DDL +description: Data Definition Language (DDL) is a group of SQL statements that you can execute to manage database objects, including tables, views, and more. displayText: DDL hoverSnippet: Data Definition Language (DDL) is a group of SQL statements that you can execute to manage database objects, including tables, views, and more. -cta: staging --- + + What is Data Definition Language (DDL) in SQL? + + Data Definition Language (DDL) is a group of SQL statements that you can execute to manage database objects, including tables, views, and more. Using DDL statements, you can perform powerful commands in your database such as creating, modifying, and dropping objects. DDL commands are usually executed in a SQL browser or stored procedure. DDL is contrasted with Data Manipulation Language (DML) which is the SQL that is used to actually access and manipulate data in database objects. The majority of data analysts will rarely execute DDL commands and will do the majority of their work creating DML statements to model and analyze data. diff --git a/website/docs/terms/dimensional-modeling.md b/website/docs/terms/dimensional-modeling.md index ef54292a610..f54f601b7d3 100644 --- a/website/docs/terms/dimensional-modeling.md +++ b/website/docs/terms/dimensional-modeling.md @@ -1,10 +1,15 @@ --- id: dimensional-modeling title: Dimensional modeling +description: Dimensional modeling is a data modeling technique where you break data up into “facts” and “dimensions” to organize and describe entities in your data warehouse displayText: dimensional modeling hoverSnippet: Dimensional modeling is a data modeling technique where you break data up into “facts” and “dimensions” to organize and describe entities within your data warehouse. --- + + Dimensional modeling: An essential concept in data modeling + + Dimensional modeling is a data modeling technique where you break data up into “facts” and “dimensions” to organize and describe entities within your data warehouse. The result is a staging layer in the data warehouse that cleans and organizes the data into the business end of the warehouse that is more accessible to data consumers. By breaking your data down into clearly defined and organized entities, your consumers can make sense of what that data is, what it’s used for, and how to join it with new or additional data. Ultimately, using dimensional modeling for your data can help create the appropriate layer of models to expose in an end business intelligence (BI) tool. diff --git a/website/docs/terms/dml.md b/website/docs/terms/dml.md index 11813a6b022..fb8a0f6d610 100644 --- a/website/docs/terms/dml.md +++ b/website/docs/terms/dml.md @@ -1,11 +1,15 @@ --- id: dml title: DML +description: Data Manipulation Language (DML) is a class of SQL statements that are used to query, edit, add and delete row-level data from database tables or views. displayText: DML hoverSnippet: Data Manipulation Language (DML) is a class of SQL statements that are used to query, edit, add and delete row-level data from database tables or views. The main DML statements are SELECT, INSERT, DELETE, and UPDATE. - --- + + DML: The SQL statements that make the data world go 'round + + Data Manipulation Language (DML) is a class of SQL statements that are used to query, edit, add and delete row-level data from database tables or views. The main DML statements are `SELECT`, `INSERT`, `DELETE`, and `UPDATE`. DML is contrasted with Data Definition Language (DDL) which is a series of SQL statements that you can use to edit and manipulate the *structure* of databases and the objects in them. diff --git a/website/docs/terms/dry.md b/website/docs/terms/dry.md index 7744951da09..0a0d6f14393 100644 --- a/website/docs/terms/dry.md +++ b/website/docs/terms/dry.md @@ -1,10 +1,15 @@ --- id: dry title: DRY +description: DRY is a software development principle that stands for “Don’t Repeat Yourself.” Living by this principle means that your aim is to reduce repetitive patterns and code. displayText: DRY hoverSnippet: DRY is a software development principle that stands for “Don’t Repeat Yourself.” Living by this principle means that your aim is to reduce repetitive patterns and duplicate code and logic in favor of modular and referenceable code. --- + + What is DRY? Hint: It makes for great code - dbt Labs + + DRY is a software development principle that stands for “Don’t Repeat Yourself.” Living by this principle means that your aim is to reduce repetitive patterns and duplicate code and logic in favor of modular and referenceable code. The DRY code principle was originally made with software engineering in mind and coined by Andy Hunt and Dave Thomas in their book, _The Pragmatic Programmer_. They believed that “every piece of knowledge must have a single, unambiguous, authoritative representation within a system.” As the field of analytics engineering and data transformation develops, there’s a growing need to adopt [software engineering best practices](https://www.getdbt.com/product/what-is-dbt/), including writing DRY code. diff --git a/website/docs/terms/edw.md b/website/docs/terms/edw.md index 2bd986e7449..1ac0f37ee47 100644 --- a/website/docs/terms/edw.md +++ b/website/docs/terms/edw.md @@ -1,10 +1,15 @@ --- id: edw title: EDW +description: The primary difference between an EDW and a regular data warehouse is, well, semantics and perspective. An EDW like any other data warehouse, is a collection of databases that centralize a business's data displayText: EDW hoverSnippet: An Enterprise Data Warehouse (EDW), like any other data warehouse, is a collection of databases that centralize a business's information from multiple sources and applications. --- + + What does an EDW (Enterprise Data Warehouse) really mean? + + An Enterprise Data Warehouse (EDW), like any other , is a collection of databases that centralize a business's information from multiple sources and applications. The primary difference between an EDW and a regular data warehouse is, well, semantics and perspective. The data stored in an EDW comes from all different functions of a company—marketing, finance, engineering, product, and more. The primary goal of an EDW is to provide a central and organized home for both the raw and transformed version of this data. EDWs in modern data practices are typically set-up in the cloud, meaning that the servers used to run the warehouse are owned and managed by a cloud provider such as Snowflake, AWS Redshift, or Google BigQuery. diff --git a/website/docs/terms/elt.md b/website/docs/terms/elt.md index c66746cdf68..a95f210a3f0 100644 --- a/website/docs/terms/elt.md +++ b/website/docs/terms/elt.md @@ -1,10 +1,13 @@ --- id: elt title: ELT +description: ELT is the process of first extraction data from different sources, then loading it into a data warehouse, and finally transforming it. displayText: ELT hoverSnippet: Extract, Load, Transform (ELT) is the process of first extracting data from different data sources, loading it into a target data warehouse, and finally transforming it. --- - + + ELT: What it is and why it's often better than ETL + Extract, Load, Transform (ELT) is the process of first extracting data from different data sources, then loading it into a target , and finally transforming it. ELT has emerged as a paradigm for how to manage information flows in a modern data warehouse. This represents a fundamental shift from how data previously was handled when Extract, Transform, Load (ETL) was the data workflow most companies implemented. diff --git a/website/docs/terms/etl.md b/website/docs/terms/etl.md index 14817a9e691..acc0e7b1c40 100644 --- a/website/docs/terms/etl.md +++ b/website/docs/terms/etl.md @@ -1,10 +1,15 @@ --- id: etl title: ETL +description: ETL is the process of first extracting data from a data source, transforming it, and then loading it into a target data warehouse. displayText: ETL hoverSnippet: Extract, Transform, Load (ETL)is the process of first extracting data from a data source, transforming it, and then loading it into a target data warehouse. --- + + ETL: What is it and is it still relevant? - dbt Labs + + ETL, or “Extract, Transform, Load”, is the process of first extracting data from a data source, transforming it, and then loading it into a target . In ETL workflows, much of the meaningful data transformation occurs outside this primary pipeline in a downstream business intelligence (BI) platform. ETL is contrasted with the newer (Extract, Load, Transform) workflow, where transformation occurs after data has been loaded into the target data warehouse. In many ways, the ETL workflow could have been renamed the ETLT workflow, because a considerable portion of meaningful data transformations happen outside the data pipeline. The same transformations can occur in both ETL and ELT workflows, the primary difference is *when* (inside or outside the primary ETL workflow) and *where* the data is transformed (ETL platform/BI tool/data warehouse). diff --git a/website/docs/terms/grain.md b/website/docs/terms/grain.md index bdd0ccce008..608a5c6391d 100644 --- a/website/docs/terms/grain.md +++ b/website/docs/terms/grain.md @@ -1,10 +1,15 @@ --- id: grain title: Data grain +description: Grain is the combination of columns at which records in a table are unique. Ideally, this is captured in a single column or a unique primary key. displayText: grain hoverSnippet: Your data's grain is the combination of columns at which records in a table are unique. Ideally, this is captured in a single column and a unique primary key. --- + + Data grain: What granularity means in terms of data modeling + + Grain is the combination of columns at which records in a table are unique. Ideally, this is captured in a single column, a unique , but even then, there is descriptive grain behind that unique id. Let’s look at some examples to better understand this concept. | user_id | address | diff --git a/website/docs/terms/idempotent.md b/website/docs/terms/idempotent.md index 0ee1655ddce..245728953c4 100644 --- a/website/docs/terms/idempotent.md +++ b/website/docs/terms/idempotent.md @@ -1,10 +1,15 @@ --- id: idempotent title: Idempotent +description: Idempotent is an adjective to describe a process that gives you the same result no matter how many times you run it. displayText: idempotent hoverSnippet: Idempotent describes a process that gives you the same result no matter how many times you run it. --- + + What is idempotency and why is the concept important in data? + + Idempotent is an adjective to describe a process that gives you the same result no matter how many times you run it. For a mathematical example, adding 1 changes the results, but multiplying by 1 is idempotent. When you add 1 to a number and then add 1 again, you get different results. If you multiply a number by 1 and multiply by 1 again, you do get the same result. diff --git a/website/docs/terms/materialization.md b/website/docs/terms/materialization.md index ef1242ff260..fdeaaebfcc8 100644 --- a/website/docs/terms/materialization.md +++ b/website/docs/terms/materialization.md @@ -1,9 +1,15 @@ --- id: materialization title: Materialization +description: A materialization is the exact Data Definition Language (DDL) that dbt will use when creating the model’s equivalent in a data warehouse. displayText: materialization hoverSnippet: The exact Data Definition Language (DDL) that dbt will use when creating the model’s equivalent in a data warehouse. --- + + + What does materialization mean in the context of dbt? + + :::important This page could use some love This term would benefit from additional depth and examples. Have knowledge to contribute? [Create a discussion in the docs.getdbt.com GitHub repository](https://github.com/dbt-labs/docs.getdbt.com/discussions) to begin the process of becoming a glossary contributor! ::: diff --git a/website/docs/terms/primary-key.md b/website/docs/terms/primary-key.md index 02319f7af30..de4c84a92cb 100644 --- a/website/docs/terms/primary-key.md +++ b/website/docs/terms/primary-key.md @@ -1,10 +1,15 @@ --- id: primary-key title: Primary key +description: A primary key is a non-null column in a database object that uniquely identifies each row. Primary keys take the form of a natural or surrogate key. displayText: primary key hoverSnippet: A primary key is a non-null column in a database object that uniquely identifies each row. --- + + Primary key in SQL (AKA Constraints) — dbt Labs + + A primary key is a non-null column in a database object that uniquely identifies each row. Primary keys take the form of a natural or . It’s important to note that for each or in your database, there must only be one primary key column per database object. At their core, you create and use these row-level unique identifiers to: diff --git a/website/docs/terms/reverse-etl.md b/website/docs/terms/reverse-etl.md index 8b3cedbd829..003a20f31d2 100644 --- a/website/docs/terms/reverse-etl.md +++ b/website/docs/terms/reverse-etl.md @@ -1,10 +1,15 @@ --- id: reverse-etl title: Reverse ETL +description: Reverse ETL is the process of getting your transformed data stored in your data warehouse to end business platforms, such as sales CRMs and ad platforms displayText: reverse ETL hoverSnippet: Reverse ETL is the process of getting your transformed data stored in your data warehouse to end business platforms, such as sales CRMs and ad platforms. --- + + Reverse ETL, demystified: What it is in plain english + + Reverse ETL is the process of getting your transformed data stored in your data warehouse to end business platforms, such as sales CRMs and ad platforms. Once in an end platform, that data is often used to drive meaningful business actions, such as creating custom audiences in ad platforms, personalizing email campaigns, or supplementing data in a sales CRM. You may also hear about reverse ETL referred to as operational analytics or data activation. Reverse ETL efforts typically happen after data teams have set up their [modern data stack](https://www.getdbt.com/blog/future-of-the-modern-data-stack/) and ultimately have a consistent and automated way to extract, load, and transform data. Data teams are also often responsible for setting up the pipelines to send down data to business platforms, and business users are typically responsible for *using the data* once it gets to their end platform. diff --git a/website/docs/terms/subquery.md b/website/docs/terms/subquery.md index 12b91bf56f0..d8f6277e4cd 100644 --- a/website/docs/terms/subquery.md +++ b/website/docs/terms/subquery.md @@ -1,10 +1,14 @@ --- id: subquery title: Subquery in SQL +description: "A subquery is what the name suggests: a query within another query. The true inception of SQL. Subqueries are often used when you need to process data in several steps." displayText: subquery hoverSnippet: A subquery is a query within another query. Subqueries are often used when you need to process data in multiple steps. --- + + What is a Subquery in SQL and when they are useful - dbt Labs + A subquery is what the name suggests: a query within another query. _The true inception of SQL_. Subqueries are often used when you need to process data in several steps. For the majority of subqueries you’ll see in actual practice, the inner query will execute first and pass its result to the outer query it's nested in. Subqueries are usually contrasted with Common Table Expressions (CTEs) as they have similar use cases. Unlike CTEs, which are usually separate `SELECT` statements within a query, subqueries are usually `SELECT` statements nested within a `JOIN`, `FROM`, or `WHERE` statement in a query. diff --git a/website/docs/terms/surrogate-key.md b/website/docs/terms/surrogate-key.md index 0dc2d8826f3..b0efc5ed890 100644 --- a/website/docs/terms/surrogate-key.md +++ b/website/docs/terms/surrogate-key.md @@ -1,10 +1,15 @@ --- id: surrogate-key title: Surrogate key +description: A surrogate key is a unique identifier derived from the data itself. It's commonly a hashed value of multiple columns that will create a uniqueness id for each row. displayText: surrogate key hoverSnippet: A surrogate key is a unique identifier derived from the data itself. It often takes the form of a hashed value of multiple columns that will create a uniqueness constraint for each row. --- + + What is a surrogate key in database table? - dbt Labs + + A surrogate key is a unique identifier derived from the data itself. It often takes the form of a hashed value of multiple columns that will create a uniqueness constraint for each row. You will need to create a surrogate key for every table that doesn't have a natural . Why would you ever need to make a surrogate key? Shouldn’t all tables innately just have a field that uniquely identifies each row? Now that would be too easy… From 4fd7c1e6ad4800942ae0e6294e4dad9fa1246dda Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Wed, 21 Sep 2022 11:18:12 -0400 Subject: [PATCH 067/130] update mobile nav button style --- website/src/css/custom.css | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/website/src/css/custom.css b/website/src/css/custom.css index 4332ff642ae..08ed95621b0 100644 --- a/website/src/css/custom.css +++ b/website/src/css/custom.css @@ -218,6 +218,14 @@ a.code-link:hover { justify-content: center; } +.navbar-sidebar .menu__link.nav-create-account { + color: var(--color-white); + border: none; +} +.navbar-sidebar .menu__link.nav-create-account:hover { + color: var(--color-white); + background: var(--color-light-teal); +} .navbar__items .navbar__link.nav-create-account { color: var(--color-white); height: 30px; @@ -984,6 +992,7 @@ filter: opacity(.75); button.DocSearch-Button { border: 1px solid #95a0b1; border-radius: 5px; + height: 30px; } button.DocSearch-Button:active, From c546cad1ea36328a3b54db9b9f45cd96fd1819b1 Mon Sep 17 00:00:00 2001 From: johnblust <97988576+johnblust@users.noreply.github.com> Date: Wed, 21 Sep 2022 11:46:48 -0400 Subject: [PATCH 068/130] Update website/docs/terms/reverse-etl.md Co-authored-by: Kira Furuichi --- website/docs/terms/reverse-etl.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/terms/reverse-etl.md b/website/docs/terms/reverse-etl.md index 003a20f31d2..522ab364174 100644 --- a/website/docs/terms/reverse-etl.md +++ b/website/docs/terms/reverse-etl.md @@ -1,7 +1,7 @@ --- id: reverse-etl title: Reverse ETL -description: Reverse ETL is the process of getting your transformed data stored in your data warehouse to end business platforms, such as sales CRMs and ad platforms +description: Reverse ETL is the process of getting your transformed data stored in your data warehouse to end business platforms, such as sales CRMs and ad platforms. displayText: reverse ETL hoverSnippet: Reverse ETL is the process of getting your transformed data stored in your data warehouse to end business platforms, such as sales CRMs and ad platforms. --- From b73795700c1acb1e25e61ec0c07f27e7ded48589 Mon Sep 17 00:00:00 2001 From: johnblust <97988576+johnblust@users.noreply.github.com> Date: Wed, 21 Sep 2022 11:48:26 -0400 Subject: [PATCH 069/130] Update website/docs/terms/data-lineage.md Co-authored-by: Kira Furuichi --- website/docs/terms/data-lineage.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/terms/data-lineage.md b/website/docs/terms/data-lineage.md index 9b813621357..41b6b4426f4 100644 --- a/website/docs/terms/data-lineage.md +++ b/website/docs/terms/data-lineage.md @@ -7,7 +7,7 @@ hoverSnippet: Data lineage provides a holistic view of how data moves through an --- - Data lineage: what it is and how to automate it - dbt Labs + Data lineage: What it is and how to automate it - dbt Labs Data lineage provides a holistic view of how data moves through an organization, where it’s transformed and consumed. Overall, data lineage is a fundamental concept to understand in the practice of analytics engineering and modern data work. From 62a5a59fa38c86e3cd3f83376f11037f393a87ce Mon Sep 17 00:00:00 2001 From: johnblust <97988576+johnblust@users.noreply.github.com> Date: Wed, 21 Sep 2022 11:48:29 -0400 Subject: [PATCH 070/130] Update website/docs/terms/data-extraction.md Co-authored-by: Kira Furuichi --- website/docs/terms/data-extraction.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/terms/data-extraction.md b/website/docs/terms/data-extraction.md index ff2608e761c..9a53562c97f 100644 --- a/website/docs/terms/data-extraction.md +++ b/website/docs/terms/data-extraction.md @@ -7,7 +7,7 @@ hoverSnippet: Data extraction is the process by which data is retrieved from mul --- - Data extraction: the first step of the ELT process + Data extraction: The first step of the ELT process There is no data work without data. So how do data teams get the data they need? Data extraction is the process by which data is retrieved from multiple sources, often varying in volume and structure. Most data extraction processes are followed by a loading process, where that extracted data is loaded into a central . From c3d621c1e937d50c27eb3d74cdecec72dbffeeb2 Mon Sep 17 00:00:00 2001 From: johnblust <97988576+johnblust@users.noreply.github.com> Date: Wed, 21 Sep 2022 11:49:03 -0400 Subject: [PATCH 071/130] Update website/docs/terms/subquery.md Co-authored-by: Kira Furuichi --- website/docs/terms/subquery.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/terms/subquery.md b/website/docs/terms/subquery.md index d8f6277e4cd..d7aecdd52cc 100644 --- a/website/docs/terms/subquery.md +++ b/website/docs/terms/subquery.md @@ -7,7 +7,7 @@ hoverSnippet: A subquery is a query within another query. Subqueries are often u --- - What is a Subquery in SQL and when they are useful - dbt Labs + What is a Subquery in SQL and when are they useful? - dbt Labs A subquery is what the name suggests: a query within another query. _The true inception of SQL_. Subqueries are often used when you need to process data in several steps. For the majority of subqueries you’ll see in actual practice, the inner query will execute first and pass its result to the outer query it's nested in. From 350a2e40b5f7e69c1d5441827df366d624e2b823 Mon Sep 17 00:00:00 2001 From: johnblust <97988576+johnblust@users.noreply.github.com> Date: Wed, 21 Sep 2022 11:50:09 -0400 Subject: [PATCH 072/130] Update DAG --- website/docs/terms/dag.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/docs/terms/dag.md b/website/docs/terms/dag.md index 21db57823e3..f70f2539f14 100644 --- a/website/docs/terms/dag.md +++ b/website/docs/terms/dag.md @@ -1,9 +1,9 @@ --- id: dag title: DAG -description: Data extraction is the process by which data is retrieved from multiple sources, often varying in volume and structure. +description: A DAG is a Directed Acyclic Graph, a type of graph whose nodes are directionally related to each other and don’t form a directional closed loop. displayText: DAG -hoverSnippet: Data extraction is the process by which data is retrieved from multiple sources, often varying in volume and structure. +hoverSnippet: A DAG is a Directed Acyclic Graph, a type of graph whose nodes are directionally related to each other and don’t form a directional closed loop. --- @@ -108,4 +108,4 @@ Ready to restructure (or create your first) DAG? Check out some of the resources - [Data modeling techniques for more modularity](https://www.getdbt.com/analytics-engineering/modular-data-modeling-technique/) - [How we structure our dbt projects](https://docs.getdbt.com/guides/best-practices/how-we-structure/1-guide-overview) - [How to audit your DAG](https://www.youtube.com/watch?v=5W6VrnHVkCA) -- [Refactoring legacy SQL to dbt](https://docs.getdbt.com/guides/getting-started/learning-more/refactoring-legacy-sql) \ No newline at end of file +- [Refactoring legacy SQL to dbt](https://docs.getdbt.com/guides/getting-started/learning-more/refactoring-legacy-sql) From 8294ff8fc1d1b8bc890e5cea45823ad4166eee02 Mon Sep 17 00:00:00 2001 From: zesuma Date: Wed, 21 Sep 2022 12:09:44 -0400 Subject: [PATCH 073/130] update admonition icons, navbar size, version 2.0 darkmode styles, footer font size and padding updates --- website/src/css/custom.css | 122 +++++++++++++++++++++++++++++++------ 1 file changed, 105 insertions(+), 17 deletions(-) diff --git a/website/src/css/custom.css b/website/src/css/custom.css index cc3b1680408..680aefea644 100644 --- a/website/src/css/custom.css +++ b/website/src/css/custom.css @@ -40,6 +40,8 @@ --ifm-code-background: var(--ifm-color-emphasis-200); --ifm-navbar-item-padding-horizontal: 1rem; --ifm-alert-color: var(--ifm-font-color-base-inverse); + --ifm-color-info-contrast-foreground: var(--ifm-color-gray-900); + --ifm-alert-foreground-color: --ifm-color-gray-900; --ifm-toc-padding-vertical: 1rem; --color-primary-blue: #262a38; --color-green-blue: #047377; @@ -93,6 +95,79 @@ html[data-theme='dark'] { --docsearch-footer-background: var(--color-primary-blue) !important; --docsearch-searchbox-focus-background: var(--color-primary-blue) !important; --docsearch-highlight-color: var(--docsearch-muted-color) !important; + + /* admonition icon */ + --ifm-color-info-contrast-foreground: var(--ifm-color-gray-900); + + --ifm-table-cell-color: var(--color-green-blue); +} + +/* For /dbt-cloud/api REDOC Page */ +html[data-theme='dark'] .api-content h2, +html[data-theme='dark'] .api-content h3, +html[data-theme='dark'] .api-content h4, +html[data-theme='dark'] .api-content h5, +html[data-theme='dark'] .api-content h5 span, +html[data-theme='dark'] .api-content h1 { + color: white; +} + +html[data-theme='dark'] .api-content a, +html[data-theme='dark'] .api-content button { + filter: brightness(1.5); +} + +.redoc-wrap { + font-size: 1rem; +} + +.api-content { + font-size: 1.125rem; +} + +.menu-content { + font-size: 1rem; + margin-top: 1em; +} + +html[data-theme='dark'] .api-content { + color: white; +} + +html[data-theme='dark'] .api-content table td > span, +html[data-theme='dark'] .api-content table td p { + color: var(--color-orange); +} + +html[data-theme='dark'] .api-content table td span { + color: white; +} + +html[data-theme='dark'] .hComDo div { + background: transparent; +} + +html[data-theme='dark'] .api-content table td p { + color: brown; +} + +html[data-theme='dark'] .redoc-wrap .menu-content * :not(.operation-type), +html[data-theme='dark'] .redoc-wrap .menu-content, +html[data-theme='dark'] .redoc-wrap .menu-content .search-input { + color: white !important; + background-color: transparent !important; +} + +html[data-theme='dark'] .redoc-wrap svg { + filter: brightness(4.5); +} + +html[data-theme='dark'] .redoc-markdown pre { + filter: brightness(1.5); +} + +html[data-theme='dark'] input.sc-avest { + filter: brightness(2.5); } .dropdown--version--hide .dropdown__menu { @@ -109,7 +184,6 @@ html[data-theme='dark'] .container.home { background: var(--ifm-background-color) !important; } -/* For /dbt-cloud/api redoc page */ div.collapser { color: var(--color-white); } @@ -185,7 +259,7 @@ a.code-link:hover { } .navbar__logo { - margin-left: 1rem; + margin-left: 1.25rem; } .navbar__search-input { @@ -195,7 +269,7 @@ a.code-link:hover { } .navbar__link { - font-size: .875rem; + font-size: 1rem; margin: var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal) 0; padding: 0; border-bottom: 1px solid transparent; @@ -316,7 +390,7 @@ a.navbar__item.navbar__link.btn:hover { /* sidebar menu */ .menu__link { - font-size: .875rem; + font-size: 1rem; justify-content: flex-end; flex-direction: row-reverse; padding: 1rem; @@ -426,6 +500,7 @@ a.navbar__item.navbar__link.btn:hover { .table-of-contents { font-size: 0.9rem; + padding-left: .75rem; } .featherlight:before { @@ -456,16 +531,16 @@ a.navbar__item.navbar__link.btn:hover { font-size: 1.5rem; } +.admonition-icon svg { + fill: var(--ifm-color-gray-900); +} + .admonition:not(.admonition-note) h5, .admonition:not(.admonition-note) .admonition-content, .admonition:not(.admonition-note) .admonition-content a { color: var(--ifm-color-gray-900); } -.admonition-icon { - display: none; -} - /* Shamelessly copy/pasted from our style guide */ .alert { padding: 1.5rem 2rem; @@ -680,7 +755,7 @@ div .toggle_src-components-faqs-styles-module { } .pagination-nav__link { - padding: var(--ifm-global-spacing) 0; + padding: 1rem 0; transition: 100ms all ease-in-out; border: none; } @@ -706,17 +781,21 @@ div .toggle_src-components-faqs-styles-module { .markdown > p, .markdown li, blockquote { - font-size: clamp(.875rem, 1.5vw, 1.125rem); - line-height: var(--filter-brightness-high); + font-size: 1.125rem; + line-height: 1.5; } .pagination-nav__link { - font-size: clamp(.875rem, 1.5vw, 1.25rem); + font-size: 1rem; } .title_src-components-file- { - font-size: 0.813rem !important; + font-size: 1.125rem !important; } .markdown h1:first-child { font-size: clamp(var(--ifm-h1-font-size) * .9375, 1vw, var(--ifm-h1-font-size)); + margin-top: .5rem; +} +.link_src-components-faqs-styles-module { + font-size: 1.125rem; } /* Docs */ @@ -805,13 +884,13 @@ html[data-theme='dark'] .breadcrumbs__item--active .breadcrumbs__link { /* footer styles */ .footer { font-weight: var(--ifm-font-weight-narrow); - font-size: 1.125rem; + font-size: .875rem; padding-top: var(--ifm-footer-padding-vertical); padding-bottom: var(--ifm-footer-padding-vertical); } .footer button { - font-size: 1.125rem; + font-size: .875rem !important; } .footer a { @@ -863,7 +942,7 @@ filter: opacity(.75); .footer__bottom { text-align: left; color: var(--color-footer-accent); - font-size: 1rem; + font-size: .875rem; } .footer__copyright { @@ -1051,6 +1130,11 @@ filter: opacity(.75); max-width: calc(100% - var(--doc-sidebar-width)); } + .row .docItemCol_src-theme-DocItem-styles-module { + padding-left: 2.5rem; + padding-right: 1.5rem; + } + .table-of-contents::before { content: 'CONTENTS'; margin-left: 0.5rem; @@ -1063,8 +1147,12 @@ filter: opacity(.75); color: var(--color-white); } + html[data-theme='dark'] .menu-content { + border-right: 1px solid #dadde1; + } + nav.menu_node_modules-\@docusaurus-theme-classic-lib-next-theme-DocSidebar-styles-module { - padding: 1rem; + padding: 1.25rem; } .docSidebarContainer_src-theme-DocPage-styles-module { From b7baaef1d11b78b618a7638a59c1cd419acc3dd6 Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Wed, 21 Sep 2022 12:26:56 -0400 Subject: [PATCH 074/130] update forum page meta description --- website/src/pages/forum.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/src/pages/forum.js b/website/src/pages/forum.js index 3469d99398e..a90e2cc875c 100644 --- a/website/src/pages/forum.js +++ b/website/src/pages/forum.js @@ -8,7 +8,7 @@ function Events() { dbt Discourse - +
        From 93299f4f1421743a6a67f0b687ff210d259b1047 Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Wed, 21 Sep 2022 12:32:05 -0400 Subject: [PATCH 075/130] update discourse url path in topicwrapper --- website/src/components/discourse/index.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/website/src/components/discourse/index.js b/website/src/components/discourse/index.js index c52f4381fd9..92650b9b910 100644 --- a/website/src/components/discourse/index.js +++ b/website/src/components/discourse/index.js @@ -177,9 +177,10 @@ export const DiscourseHelpFeed = ({ // Helpers function TopicWrapper({ topic, children }) { - if(topic?.slug) { + console.log('topic', topic) + if(topic?.slug && topic?.id) { return ( - {children} + {children} ) } else { return ( From 1c7899ecec0ecb710b21f5c5a00105200818419b Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Wed, 21 Sep 2022 12:35:06 -0400 Subject: [PATCH 076/130] remove console --- website/src/components/discourse/index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/website/src/components/discourse/index.js b/website/src/components/discourse/index.js index 92650b9b910..a509e0e3b4b 100644 --- a/website/src/components/discourse/index.js +++ b/website/src/components/discourse/index.js @@ -177,7 +177,6 @@ export const DiscourseHelpFeed = ({ // Helpers function TopicWrapper({ topic, children }) { - console.log('topic', topic) if(topic?.slug && topic?.id) { return ( {children} From 8a04a525c46a85b3b641f3342ae08ebc595859dd Mon Sep 17 00:00:00 2001 From: johnblust <97988576+johnblust@users.noreply.github.com> Date: Wed, 21 Sep 2022 13:46:25 -0400 Subject: [PATCH 077/130] Update website/docs/terms/data-warehouse.md Co-authored-by: Kira Furuichi --- website/docs/terms/data-warehouse.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/terms/data-warehouse.md b/website/docs/terms/data-warehouse.md index 34f92ad07d4..8d79c0444e0 100644 --- a/website/docs/terms/data-warehouse.md +++ b/website/docs/terms/data-warehouse.md @@ -7,7 +7,7 @@ hoverSnippet: A data warehouse is a data management system used for data storage --- - Data warehouses in the post-modern data stack - dbt Labs + Data warehouses in the modern data stack - dbt Labs A data warehouse is a data management system used for data storage and computing that allows for analytics activities such as transforming and sharing data. It helps businesses to capture and store data from external sources. Analytics engineers and data analysts use it to query datasets using SQL, helping to transform them into powerful data models and reports. Data warehouses are the central source of truth for any modern data stack. Data is ingested, transformed, and shared to other tools from the warehouse. From 2c752591c5e3f1449aa09d9bff40c71666f3ab10 Mon Sep 17 00:00:00 2001 From: zesuma Date: Wed, 21 Sep 2022 15:42:09 -0400 Subject: [PATCH 078/130] adding padding to sidebar --- website/src/css/custom.css | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/website/src/css/custom.css b/website/src/css/custom.css index 680aefea644..c994086285b 100644 --- a/website/src/css/custom.css +++ b/website/src/css/custom.css @@ -420,7 +420,7 @@ a.navbar__item.navbar__link.btn:hover { /* level2 */ .menu__list .menu__list { font-weight: var(--ifm-font-weight-narrow); - padding-left: 1.5rem; + padding-left: 1rem; } .menu__list .menu__list .menu__link { @@ -433,11 +433,10 @@ a.navbar__item.navbar__link.btn:hover { } .menu__list-item-collapsible a { - padding-left: 0 !important; + padding-left: 0; } .menu__list .menu__list a.menu__link.menu__link--sublist { - padding-left: 0; font-weight: var(--ifm-font-weight-semibold); } @@ -445,6 +444,10 @@ a.navbar__item.navbar__link.btn:hover { color: inherit; } +.theme-doc-sidebar-item-category-level-2.menu__list-item ul { + margin-left: 1rem; +} + /* color for subtext only */ .theme-doc-sidebar-item-link :not(.menu__list-item-collapsible .menu__link:first-of-type) { color: var(--color-nav-sub-level-text); @@ -500,7 +503,8 @@ a.navbar__item.navbar__link.btn:hover { .table-of-contents { font-size: 0.9rem; - padding-left: .75rem; + padding-left: 1.25rem; + padding-right: 1.25rem; } .featherlight:before { @@ -1107,6 +1111,11 @@ filter: opacity(.75); position: relative; } + aside .menu { + padding-left: 1.25rem; + padding-right: 1.25rem; + } + .navbar__item { padding: var(--ifm-navbar-item-padding-vertical) 0; } @@ -1130,9 +1139,9 @@ filter: opacity(.75); max-width: calc(100% - var(--doc-sidebar-width)); } - .row .docItemCol_src-theme-DocItem-styles-module { + .container .row .col { padding-left: 2.5rem; - padding-right: 1.5rem; + padding-right: 2.5rem; } .table-of-contents::before { @@ -1151,10 +1160,6 @@ filter: opacity(.75); border-right: 1px solid #dadde1; } - nav.menu_node_modules-\@docusaurus-theme-classic-lib-next-theme-DocSidebar-styles-module { - padding: 1.25rem; - } - .docSidebarContainer_src-theme-DocPage-styles-module { margin-top: calc(-.8 * var(--ifm-navbar-height)) !important; } From 77be8413014ce389e9107b21d477cf6642a44b07 Mon Sep 17 00:00:00 2001 From: zesuma Date: Wed, 21 Sep 2022 15:48:00 -0400 Subject: [PATCH 079/130] small nav pdding fix on dropdowns --- website/src/css/custom.css | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/src/css/custom.css b/website/src/css/custom.css index c994086285b..17b37afce68 100644 --- a/website/src/css/custom.css +++ b/website/src/css/custom.css @@ -420,7 +420,7 @@ a.navbar__item.navbar__link.btn:hover { /* level2 */ .menu__list .menu__list { font-weight: var(--ifm-font-weight-narrow); - padding-left: 1rem; + padding-left: 1.5rem; } .menu__list .menu__list .menu__link { @@ -429,7 +429,7 @@ a.navbar__item.navbar__link.btn:hover { } .menu__list-item .menu__list-item .menu__link { - padding-left: 1rem; + padding-left: 1.5rem; } .menu__list-item-collapsible a { @@ -445,7 +445,7 @@ a.navbar__item.navbar__link.btn:hover { } .theme-doc-sidebar-item-category-level-2.menu__list-item ul { - margin-left: 1rem; + margin-left: 1.5rem; } /* color for subtext only */ From 6c5ffb7f1d77d61513e74f27e50577fcbe098beb Mon Sep 17 00:00:00 2001 From: zesuma Date: Wed, 21 Sep 2022 16:12:48 -0400 Subject: [PATCH 080/130] final cleanup --- website/src/css/custom.css | 56 ++------------------------------------ 1 file changed, 2 insertions(+), 54 deletions(-) diff --git a/website/src/css/custom.css b/website/src/css/custom.css index 17b37afce68..d8fed88556d 100644 --- a/website/src/css/custom.css +++ b/website/src/css/custom.css @@ -325,54 +325,6 @@ a.code-link:hover { margin-right: .75em; } -/* moon/sun icons for dark/light mode - HIDE UNTIL SWIZZLE - These styles get overridden on live site */ -/* input.toggleScreenReader_node_modules-\@docusaurus-theme-classic-lib-next-theme-ColorModeToggle-styles-module::after { - width: 100%; - height: 100%; - aspect-ratio: unset; -} - -input.toggleScreenReader_node_modules-\@docusaurus-theme-classic-lib-next-theme-ColorModeToggle-styles-module { - appearance: none; - cursor: pointer; -} - -.toggleButton_node_modules-\@docusaurus-theme-classic-lib-next-theme-ColorModeToggle-styles-module { - display: none !important; -} - -.toggle_node_modules-\@docusaurus-theme-classic-lib-next-theme-ColorModeToggle-styles-module.toggle_node_modules-\@docusaurus-theme-classic-lib-next-theme-Navbar-styles-module::before { - content: ''; - pointer-events: none; - position: absolute; - height: 100%; - left: 0; - top: 0; - width: 100%; - z-index: 1; -} - -.toggle_node_modules-\@docusaurus-theme-classic-lib-next-theme-ColorModeToggle-styles-module { - position: relative; - width: 21px !important; - height: 21px !important; -} - -.toggleScreenReader_node_modules-\@docusaurus-theme-classic-lib-next-theme-ColorModeToggle-styles-module { - clip: unset !important; - height: 1rem !important; - width: 1rem !important; - margin: 0 !important; -} - -html[data-theme=dark] [class^=toggle_]:after { - content: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTggMy4yYS43Ny43NyAwIDAgMS0uNzctLjc3Vi43N2EuNzcuNzcgMCAxIDEgMS41NCAwdjEuNjZBLjc3Ljc3IDAgMCAxIDggMy4yWk04IDE2YS43Ny43NyAwIDAgMS0uNzctLjc3di0xLjY3YS43Ny43NyAwIDAgMSAxLjU0IDB2MS42N0EuNzcuNzcgMCAwIDEgOCAxNlptMy45NC0xMS4xN2EuNzcuNzcgMCAwIDEtLjU1LTEuM2wxLjE4LTEuMTlhLjc3Ljc3IDAgMCAxIDEuMDkgMS4wOUwxMi40OCA0LjZhLjc2Ljc2IDAgMCAxLS41NC4yMlptLTkuMDYgOS4wNWEuNzcuNzcgMCAwIDEtLjU0LTEuM2wxLjE4LTEuMTlhLjc3Ljc3IDAgMSAxIDEuMDkgMS4wOWwtMS4xOCAxLjE4YS43Ni43NiAwIDAgMS0uNTUuMjJabTEyLjM1LTUuMTFoLTEuNjZhLjc3Ljc3IDAgMCAxIDAtMS41NGgxLjY2YS43Ny43NyAwIDAgMSAwIDEuNTRabS0xMi44IDBILjc3YS43Ny43NyAwIDEgMSAwLTEuNTRoMS42NmEuNzcuNzcgMCAxIDEgMCAxLjU0Wm0xMC42OSA1LjExYS43Ni43NiAwIDAgMS0uNTUtLjIybC0xLjE4LTEuMThhLjc3Ljc3IDAgMCAxIDEuMDktMS4wOWwxLjE4IDEuMThhLjc2Ljc2IDAgMCAxLS41NCAxLjMxWk00LjA2IDQuODNhLjc2Ljc2IDAgMCAxLS41NC0uMjJMMi4zNCAzLjQzYS43Ny43NyAwIDAgMSAxLjA5LTEuMDlMNC42IDMuNTJhLjc3Ljc3IDAgMCAxLS41NSAxLjMxWk04IDExLjU1YTMuNTUgMy41NSAwIDEgMSAwLTcuMSAzLjU1IDMuNTUgMCAwIDEgMCA3LjFaIiBmaWxsPSIjZmZmIi8+PC9zdmc+); -} - -html[data-theme=light] [class^=toggle_]:after { - content: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTQuMzA4IDMuMzg1YzAtMS4xNzguMTczLTIuMzcuNjE1LTMuMzg1QzEuOTgzIDEuMjggMCA0LjI4MiAwIDcuNjkyQTguMzA4IDguMzA4IDAgMCAwIDguMzA4IDE2YzMuNDEgMCA2LjQxMi0xLjk4MyA3LjY5Mi00LjkyMy0xLjAxNS40NDItMi4yMDcuNjE1LTMuMzg1LjYxNWE4LjMwOCA4LjMwOCAwIDAgMS04LjMwNy04LjMwN1oiIGZpbGw9IiM5MkEwQjMiLz48L3N2Zz4=); -} */ - /* navbar buttons */ a.navbar__item.navbar__link.btn { border: none; @@ -428,10 +380,6 @@ a.navbar__item.navbar__link.btn:hover { padding-bottom: .5rem; } -.menu__list-item .menu__list-item .menu__link { - padding-left: 1.5rem; -} - .menu__list-item-collapsible a { padding-left: 0; } @@ -444,8 +392,8 @@ a.navbar__item.navbar__link.btn:hover { color: inherit; } -.theme-doc-sidebar-item-category-level-2.menu__list-item ul { - margin-left: 1.5rem; +i.theme-doc-sidebar-item-category.theme-doc-sidebar-item-category-level-2.menu__list-item { + margin-left: 1rem; } /* color for subtext only */ From 60c1f5f5c08f774739a7a08815c96991b2bc3e12 Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Thu, 22 Sep 2022 10:07:50 +0100 Subject: [PATCH 081/130] Create liststeps-endpoint-deprecation.md release note for list steps deprecation warning https://www.notion.so/dbtlabs/Deprecation-Warning-of-List-Steps-API-Endpoint-796ec4a94d784cfab2d4cf5fae0e6d94 --- .../liststeps-endpoint-deprecation.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 website/docs/docs/dbt-cloud/release-notes/05-Sept-2002/liststeps-endpoint-deprecation.md diff --git a/website/docs/docs/dbt-cloud/release-notes/05-Sept-2002/liststeps-endpoint-deprecation.md b/website/docs/docs/dbt-cloud/release-notes/05-Sept-2002/liststeps-endpoint-deprecation.md new file mode 100644 index 00000000000..f85497873d5 --- /dev/null +++ b/website/docs/docs/dbt-cloud/release-notes/05-Sept-2002/liststeps-endpoint-deprecation.md @@ -0,0 +1,15 @@ +--- +title: "List Steps API endpoint deprecation warning" +id: "liststeps-endpoint-deprecation.md" +description: "List Steps API deprecation" +sidebar_label: "Deprecation: List Steps API endpoint" +tags: [Sept-15-2022] +--- + +On October 14th, 2022 we are deprecating the [List Steps](https://docs.getdbt.com/dbt-cloud/api-v2#tag/Runs/operation/listSteps) API endpoint. From October 14th, any GET requests to this endpoint will fail. Please prepare to move off of the List Steps endpoint as soon as possible. + +We will continue to maintain the [Get Run](https://docs.getdbt.com/dbt-cloud/api-v2#tag/Runs/operation/getRunById) endpoint, which is a viable alternative depending on the use case. + +You can get run steps for an individual run with a GET request to the following URL: + +`https://cloud.getdbt.com/api/v2/accounts/{accountId}/runs/{runId}/?include_related=["run_steps"]` From 2d2e76a1f6c2207ce96b07dfc0ebe0e4f5884c88 Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Thu, 22 Sep 2022 10:20:19 +0100 Subject: [PATCH 082/130] Update liststeps-endpoint-deprecation.md --- .../05-Sept-2002/liststeps-endpoint-deprecation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/dbt-cloud/release-notes/05-Sept-2002/liststeps-endpoint-deprecation.md b/website/docs/docs/dbt-cloud/release-notes/05-Sept-2002/liststeps-endpoint-deprecation.md index f85497873d5..fc205be2065 100644 --- a/website/docs/docs/dbt-cloud/release-notes/05-Sept-2002/liststeps-endpoint-deprecation.md +++ b/website/docs/docs/dbt-cloud/release-notes/05-Sept-2002/liststeps-endpoint-deprecation.md @@ -10,6 +10,6 @@ On October 14th, 2022 we are deprecating the [List Steps](https://docs.getdbt.co We will continue to maintain the [Get Run](https://docs.getdbt.com/dbt-cloud/api-v2#tag/Runs/operation/getRunById) endpoint, which is a viable alternative depending on the use case. -You can get run steps for an individual run with a GET request to the following URL: +You can fetch run steps for an individual run with a GET request to the following URL: `https://cloud.getdbt.com/api/v2/accounts/{accountId}/runs/{runId}/?include_related=["run_steps"]` From e7415c3b45cee4a60aa82272d958503d12fb6d08 Mon Sep 17 00:00:00 2001 From: johnblust <97988576+johnblust@users.noreply.github.com> Date: Thu, 22 Sep 2022 09:34:54 -0400 Subject: [PATCH 083/130] Update website/docs/terms/surrogate-key.md Co-authored-by: Kira Furuichi --- website/docs/terms/surrogate-key.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/terms/surrogate-key.md b/website/docs/terms/surrogate-key.md index b0efc5ed890..f1cdfa2fafe 100644 --- a/website/docs/terms/surrogate-key.md +++ b/website/docs/terms/surrogate-key.md @@ -1,7 +1,7 @@ --- id: surrogate-key title: Surrogate key -description: A surrogate key is a unique identifier derived from the data itself. It's commonly a hashed value of multiple columns that will create a uniqueness id for each row. +description: A surrogate key is a unique identifier derived from the data itself. It's commonly a hashed value of multiple columns that will create a unique id for each row. displayText: surrogate key hoverSnippet: A surrogate key is a unique identifier derived from the data itself. It often takes the form of a hashed value of multiple columns that will create a uniqueness constraint for each row. --- From 17add0bb20e25de7c680a136e95de86a35d39937 Mon Sep 17 00:00:00 2001 From: zesuma Date: Thu, 22 Sep 2022 09:35:14 -0400 Subject: [PATCH 084/130] make link color more visible on light/dark modes --- website/src/css/custom.css | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/website/src/css/custom.css b/website/src/css/custom.css index 77d0ab083cc..76c8c9bee07 100644 --- a/website/src/css/custom.css +++ b/website/src/css/custom.css @@ -112,9 +112,14 @@ html[data-theme='dark'] .api-content h1 { color: white; } -html[data-theme='dark'] .api-content a, -html[data-theme='dark'] .api-content button { - filter: brightness(1.5); +html[data-theme='dark'] .api-content button, +html[data-theme='dark'] .api-content a { + filter: brightness(1.25); +} + +.redoc-wrap .api-content a, +.redoc-wrap .api-content a:visited { + color: var(--color-green-blue); } .redoc-wrap { From cf60b61e836a136f1332f02d9d77dce20252f1fd Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Thu, 22 Sep 2022 14:44:11 +0100 Subject: [PATCH 085/130] Update website/docs/docs/building-a-dbt-project/exposures.md --- website/docs/docs/building-a-dbt-project/exposures.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/building-a-dbt-project/exposures.md b/website/docs/docs/building-a-dbt-project/exposures.md index b19288b35e9..2d820095954 100644 --- a/website/docs/docs/building-a-dbt-project/exposures.md +++ b/website/docs/docs/building-a-dbt-project/exposures.md @@ -59,7 +59,7 @@ _Expected:_ - **depends_on**: list of refable nodes (`ref` + `source`) _Optional:_ -- **url**: will enable the link to "View this exposure" in the documentation +- **url**: enables the link to "View this exposure" in the documentation - **maturity**: one of `high`, `medium`, `low` - **owner**: name From ddca2ee195b1e8e9b023ac02069f0f6623e1091d Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Thu, 22 Sep 2022 14:50:57 +0100 Subject: [PATCH 086/130] Update website/docs/docs/building-a-dbt-project/exposures.md --- website/docs/docs/building-a-dbt-project/exposures.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/building-a-dbt-project/exposures.md b/website/docs/docs/building-a-dbt-project/exposures.md index 2d820095954..bae56a7e5d5 100644 --- a/website/docs/docs/building-a-dbt-project/exposures.md +++ b/website/docs/docs/building-a-dbt-project/exposures.md @@ -59,7 +59,7 @@ _Expected:_ - **depends_on**: list of refable nodes (`ref` + `source`) _Optional:_ -- **url**: enables the link to "View this exposure" in the documentation +- **url**: enables the link to **View this exposure** in the dbt documentation site - **maturity**: one of `high`, `medium`, `low` - **owner**: name From 68b81d9c78cc3805d6383879f1582c8a285e0326 Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Thu, 22 Sep 2022 14:52:26 +0100 Subject: [PATCH 087/130] Update website/docs/docs/building-a-dbt-project/exposures.md --- website/docs/docs/building-a-dbt-project/exposures.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/building-a-dbt-project/exposures.md b/website/docs/docs/building-a-dbt-project/exposures.md index bae56a7e5d5..df8c1d0e72e 100644 --- a/website/docs/docs/building-a-dbt-project/exposures.md +++ b/website/docs/docs/building-a-dbt-project/exposures.md @@ -59,7 +59,7 @@ _Expected:_ - **depends_on**: list of refable nodes (`ref` + `source`) _Optional:_ -- **url**: enables the link to **View this exposure** in the dbt documentation site +- **url**: enables the link to **View this exposure** in the upper right corner of the generated documentation site - **maturity**: one of `high`, `medium`, `low` - **owner**: name From 43d576b1e55d4bc92d5f53fe88495552cbd0923c Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Thu, 22 Sep 2022 14:58:50 +0100 Subject: [PATCH 088/130] Update redshift-profile.md --- website/docs/reference/warehouse-profiles/redshift-profile.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/reference/warehouse-profiles/redshift-profile.md b/website/docs/reference/warehouse-profiles/redshift-profile.md index 23819381019..6d9db3fb0f2 100644 --- a/website/docs/reference/warehouse-profiles/redshift-profile.md +++ b/website/docs/reference/warehouse-profiles/redshift-profile.md @@ -68,7 +68,7 @@ my-redshift-db: iam_profile: data_engineer # optional iam_duration_seconds: 900 # optional autocreate: true # optional - db_groups: ['analysts'] # optional + db_groups: ['ANALYSTS'] # optional # Other Redshift configs: port: 5439 From 460033d92e09f62f290d9e22aca2858bbfa17ed5 Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Thu, 22 Sep 2022 09:59:59 -0400 Subject: [PATCH 089/130] add initial tests for DiscourseFeed component --- website/package.json | 3 ++- website/src/components/discourse/index.js | 12 +++++++++-- .../src/components/discourse/index.test.js | 21 +++++++++++++++++++ website/static/css/__mocks__/styleMock.js | 1 + 4 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 website/src/components/discourse/index.test.js create mode 100644 website/static/css/__mocks__/styleMock.js diff --git a/website/package.json b/website/package.json index 92562e3d0d9..6ef1980d96f 100644 --- a/website/package.json +++ b/website/package.json @@ -61,7 +61,8 @@ "testEnvironment": "jsdom", "setupFilesAfterEnv": [ "/jest.setup.js" - ] + ], + "moduleNameMapper": { "\\.css$": "/static/css/__mocks__/styleMock.js" } }, "version": "0.0.0" } diff --git a/website/src/components/discourse/index.js b/website/src/components/discourse/index.js index a509e0e3b4b..7b0e0b79edd 100644 --- a/website/src/components/discourse/index.js +++ b/website/src/components/discourse/index.js @@ -29,6 +29,8 @@ export const DiscourseFeed = ({ const [isError, setIsError] = useState(false) useEffect(() => { + let isMounted = true + // Get topics from Discourse API const fetchData = async () => { try { @@ -75,14 +77,20 @@ export const DiscourseFeed = ({ if(!data) throw new Error('Unable to get latest topics.') // Set topics count - setTopics(data.slice(0, topic_count)) - setLoading(false) + if(isMounted) { + setTopics(data.slice(0, topic_count)) + setLoading(false) + } } catch(err) { setIsError(true) setLoading(false) } } fetchData() + + return () => { + isMounted = false + } }, []) // Set initial min-height diff --git a/website/src/components/discourse/index.test.js b/website/src/components/discourse/index.test.js new file mode 100644 index 00000000000..0d75ca3371e --- /dev/null +++ b/website/src/components/discourse/index.test.js @@ -0,0 +1,21 @@ +import React from 'react' +import { render, screen } from '@testing-library/react'; +import { DiscourseFeed, DiscourseHelpFeed } from './index' + +describe("Test DiscourseFeed component", () => { + // returns mocks to original state (ex: window = undefined) + afterEach(() => jest.restoreAllMocks()) + + it('Should render same text passed into title prop', () => { + render() + const testElement = screen.getByText(/Open topics/i) + expect(testElement).toBeInTheDocument() + }) + + it('Should display loading icon on inital load', () => { + const { container } = render() + const img = container.querySelector('img') + expect(img).toBeInTheDocument() + }) +}) + diff --git a/website/static/css/__mocks__/styleMock.js b/website/static/css/__mocks__/styleMock.js new file mode 100644 index 00000000000..f053ebf7976 --- /dev/null +++ b/website/static/css/__mocks__/styleMock.js @@ -0,0 +1 @@ +module.exports = {}; From 7d10dfe7977b4e3c24ce27ff9b04815ed7282e00 Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Thu, 22 Sep 2022 15:22:30 +0100 Subject: [PATCH 090/130] Update website/docs/docs/dbt-cloud/using-dbt-cloud/cloud-snapshotting-source-freshness.md --- .../using-dbt-cloud/cloud-snapshotting-source-freshness.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/website/docs/docs/dbt-cloud/using-dbt-cloud/cloud-snapshotting-source-freshness.md b/website/docs/docs/dbt-cloud/using-dbt-cloud/cloud-snapshotting-source-freshness.md index 973b7a09a27..e5c8ee7169f 100644 --- a/website/docs/docs/dbt-cloud/using-dbt-cloud/cloud-snapshotting-source-freshness.md +++ b/website/docs/docs/dbt-cloud/using-dbt-cloud/cloud-snapshotting-source-freshness.md @@ -16,7 +16,8 @@ First, make sure to configure your sources to [snapshot freshness information](u - - **v0.21.0:** Renamed `dbt source snapshot-freshness` to `dbt source freshness`. If using an older version of dbt, the command is `snapshot-freshness`. Note that while this is the case, you will still need to use the pre-v0.21 syntax of `dbt source snapshot-freshness` if you wish to have dbt Cloud display data source freshness as a rendered user interface as per the screenshot above. + - **v0.21.0:** Renamed `dbt source snapshot-freshness` to `dbt source freshness`. If using an older version of dbt, the command is `snapshot-freshness`. + To have dbt Cloud display data source freshness as a rendered user interface, you will still need to use the pre-v0.21 syntax of `dbt source snapshot-freshness`. From 575e0528bc0c5a78ce50ca46b165b51722443db8 Mon Sep 17 00:00:00 2001 From: zesuma Date: Thu, 22 Sep 2022 10:23:42 -0400 Subject: [PATCH 091/130] added a little height to nav buttons --- website/src/css/custom.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/src/css/custom.css b/website/src/css/custom.css index 76c8c9bee07..986de078381 100644 --- a/website/src/css/custom.css +++ b/website/src/css/custom.css @@ -307,7 +307,7 @@ a.code-link:hover { } .navbar__items .navbar__link.nav-create-account { color: var(--color-white); - height: 30px; + height: 35px; align-self: auto; padding: 0 12px; margin-top: 0; @@ -1016,7 +1016,7 @@ filter: opacity(.75); button.DocSearch-Button { border: 1px solid #95a0b1; border-radius: 5px; - height: 30px; + height: 35px; } button.DocSearch-Button:active, From bbabf3db3a6468a82aea3900c2ecd61b7082b4b8 Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Thu, 22 Sep 2022 15:51:11 +0100 Subject: [PATCH 092/130] Update website/docs/reference/dbt-jinja-functions/ref.md --- website/docs/reference/dbt-jinja-functions/ref.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/website/docs/reference/dbt-jinja-functions/ref.md b/website/docs/reference/dbt-jinja-functions/ref.md index 429b0245937..786f177af9f 100644 --- a/website/docs/reference/dbt-jinja-functions/ref.md +++ b/website/docs/reference/dbt-jinja-functions/ref.md @@ -45,7 +45,9 @@ There is also a two-argument variant of the `ref` function. With this variant, y select * from {{ ref('package_name', 'model_name') }} ``` -**Note:** The `package_name` should only include the name of the package, not the maintainer. For example, if using the `fivetran/stripe` package, you'll want to put `stripe` in that argument, rather than `fivetran/stripe`. +**Note:** The `package_name` should only include the name of the package, not the maintainer. For example, if you use the [`fivetran/stripe`](https://hub.getdbt.com/fivetran/stripe/latest/) package, you'll want to type `stripe` in that argument, and not `fivetran/stripe`. + +`select * from {{ ref('stripe', 'dim_orders') }}` ### Forcing Dependencies From e68093332505333a86fbda84681d12c618669339 Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Thu, 22 Sep 2022 15:52:40 +0100 Subject: [PATCH 093/130] Update website/docs/reference/dbt-jinja-functions/ref.md --- website/docs/reference/dbt-jinja-functions/ref.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/reference/dbt-jinja-functions/ref.md b/website/docs/reference/dbt-jinja-functions/ref.md index 786f177af9f..03548d031c7 100644 --- a/website/docs/reference/dbt-jinja-functions/ref.md +++ b/website/docs/reference/dbt-jinja-functions/ref.md @@ -45,7 +45,7 @@ There is also a two-argument variant of the `ref` function. With this variant, y select * from {{ ref('package_name', 'model_name') }} ``` -**Note:** The `package_name` should only include the name of the package, not the maintainer. For example, if you use the [`fivetran/stripe`](https://hub.getdbt.com/fivetran/stripe/latest/) package, you'll want to type `stripe` in that argument, and not `fivetran/stripe`. +**Note:** The `package_name` should only include the name of the package, not the maintainer. For example, if you use the [`fivetran/stripe`](https://hub.getdbt.com/fivetran/stripe/latest/) package, type `stripe` in that argument, and not `fivetran/stripe`. `select * from {{ ref('stripe', 'dim_orders') }}` From 65bea0c759334c71c363b17d8d3438fef511de68 Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Thu, 22 Sep 2022 15:53:51 +0100 Subject: [PATCH 094/130] Update ref.md --- website/docs/reference/dbt-jinja-functions/ref.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/website/docs/reference/dbt-jinja-functions/ref.md b/website/docs/reference/dbt-jinja-functions/ref.md index 03548d031c7..9be20d0a226 100644 --- a/website/docs/reference/dbt-jinja-functions/ref.md +++ b/website/docs/reference/dbt-jinja-functions/ref.md @@ -45,9 +45,7 @@ There is also a two-argument variant of the `ref` function. With this variant, y select * from {{ ref('package_name', 'model_name') }} ``` -**Note:** The `package_name` should only include the name of the package, not the maintainer. For example, if you use the [`fivetran/stripe`](https://hub.getdbt.com/fivetran/stripe/latest/) package, type `stripe` in that argument, and not `fivetran/stripe`. - -`select * from {{ ref('stripe', 'dim_orders') }}` +**Note:** The `package_name` should only include the name of the package, not the maintainer. For example, if you use the [`fivetran/stripe`](https://hub.getdbt.com/fivetran/stripe/latest/) package, type `stripe` in that argument, and not `fivetran/stripe`. ### Forcing Dependencies From a63856044f53b688bec4117b3e89ac4b9125a6c0 Mon Sep 17 00:00:00 2001 From: zesuma Date: Thu, 22 Sep 2022 10:57:43 -0400 Subject: [PATCH 095/130] padding adjustment --- website/src/css/custom.css | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/website/src/css/custom.css b/website/src/css/custom.css index 986de078381..551f537db20 100644 --- a/website/src/css/custom.css +++ b/website/src/css/custom.css @@ -117,6 +117,10 @@ html[data-theme='dark'] .api-content a { filter: brightness(1.25); } +html[data-theme='dark'] .api-content a:hover { + filter: brightness(1.25); +} + .redoc-wrap .api-content a, .redoc-wrap .api-content a:visited { color: var(--color-green-blue); @@ -942,6 +946,12 @@ filter: opacity(.75); } } +@media (min-width: 997px) and (max-width: 1729px) { + .container .row .col { + padding-left: 2.5rem; + } +} + /* Begin @Media Queries */ @media (min-width: 997px) and (max-width: 1150px) { nav.navbar a.navbar__link { @@ -1072,11 +1082,12 @@ filter: opacity(.75); html.docs-version-current .navbar__brand { background-color: var(--ifm-background-color); border-right: 1px solid var(--ifm-toc-border-color); -} + } button.DocSearch-Button { min-width: 175px; } + } @media (min-width: 997px) { @@ -1129,11 +1140,6 @@ filter: opacity(.75); max-width: calc(100% - var(--doc-sidebar-width)); } - .container .row .col { - padding-left: 2.5rem; - padding-right: 2.5rem; - } - .table-of-contents::before { content: 'CONTENTS'; margin-left: 0.5rem; From 5e47d8530478a189f4397171ae8e4ce6ddb9893e Mon Sep 17 00:00:00 2001 From: zesuma Date: Thu, 22 Sep 2022 11:01:09 -0400 Subject: [PATCH 096/130] yet another padding change --- website/src/css/custom.css | 1 + 1 file changed, 1 insertion(+) diff --git a/website/src/css/custom.css b/website/src/css/custom.css index 551f537db20..70896d632d5 100644 --- a/website/src/css/custom.css +++ b/website/src/css/custom.css @@ -425,6 +425,7 @@ a.navbar__item.navbar__link.btn:hover { .menu__list .menu__list a.menu__link.menu__link--sublist { font-weight: var(--ifm-font-weight-semibold); + margin: 1rem; } .menu__list-item-collapsible .menu__link--active { From 9a0334fb77bc94b46601c41ede0182db34846481 Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Thu, 22 Sep 2022 11:02:39 -0400 Subject: [PATCH 097/130] add tests --- website/src/components/discourse/index.js | 15 ++-- .../src/components/discourse/index.test.js | 80 ++++++++++++++++++- 2 files changed, 86 insertions(+), 9 deletions(-) diff --git a/website/src/components/discourse/index.js b/website/src/components/discourse/index.js index 7b0e0b79edd..ade96f5fd99 100644 --- a/website/src/components/discourse/index.js +++ b/website/src/components/discourse/index.js @@ -99,18 +99,23 @@ export const DiscourseFeed = ({ const setMinHeight = isError ? 'auto' : 414 - + return (
        {title && (

        {title}

        )} {loading ? ( - Loading + Loading ) : isError || !topics?.length > 0 ? ( -

        Unable to load forum topics at this time.

        +

        Unable to load forum topics at this time.

        ) : ( -
          +
            {topics.map(topic => (
          • {topic?.has_accepted_answer && ( @@ -134,7 +139,7 @@ export const DiscourseFeed = ({
          )} {show_cta && ( - {link_text} + {link_text} )}
        ) diff --git a/website/src/components/discourse/index.test.js b/website/src/components/discourse/index.test.js index 0d75ca3371e..c0d40e26b8f 100644 --- a/website/src/components/discourse/index.test.js +++ b/website/src/components/discourse/index.test.js @@ -1,6 +1,21 @@ import React from 'react' -import { render, screen } from '@testing-library/react'; -import { DiscourseFeed, DiscourseHelpFeed } from './index' +import axios from 'axios' +import { render, screen } from '@testing-library/react' +import { DiscourseFeed } from './index' + +// Mock api data +const mockAxiosResponse = { + data: [ + { + "id": 4911, + "title": "Processing source tables with differing arrival times throughout day", + "has_accepted_answer": true, + "author": "MatthewMunn", + "like_count": 1, + "posts_count": 2 + } + ], +} describe("Test DiscourseFeed component", () => { // returns mocks to original state (ex: window = undefined) @@ -13,9 +28,66 @@ describe("Test DiscourseFeed component", () => { }) it('Should display loading icon on inital load', () => { - const { container } = render() - const img = container.querySelector('img') + render() + const img = screen.getByTestId('feed-loader') expect(img).toBeInTheDocument() }) + + it('Should display Discourse data after API fetch', async () => { + // Get mock api response + jest.spyOn(axios, 'post').mockResolvedValueOnce(mockAxiosResponse) + + render() + // Topic "has_accepted_answer" - should display ✅ ahead of title + const topicCheckMark = await screen.findByText(/✅/i) + expect(topicCheckMark).toBeInTheDocument() + + // Topic title should exist in document + const topicTitle = await screen.findByText(/Processing source tables/i) + expect(topicTitle).toBeInTheDocument() + + // Author should display + const topicAuthor = await screen.findByText(/MatthewMunn/i) + expect(topicAuthor).toBeInTheDocument() + + // Should display reply + const topicReply = await screen.findByText(/1 reply/i) + expect(topicReply).toBeInTheDocument() + + // Has 1 like, should display '1 like' and not '1 likes' + const topicLikes = await screen.findByText(/1 like/i) + expect(topicLikes).toBeInTheDocument() + }) + + it('Should show cta with correct text and href', async () => { + // Get mock api response + jest.spyOn(axios, 'post').mockResolvedValueOnce(mockAxiosResponse) + + render() + + const button = await screen.findByTestId('feed-cta') + const buttonText = await screen.findByText(/See open topics/i) + const buttonHref = buttonText.closest('a') + expect(button).toBeInTheDocument() + expect(buttonText).toBeInTheDocument() + expect(buttonHref).toHaveAttribute('href', 'https://discourse.getdbt.com/c/help/19') + }) + + it('Should display message when no topics found', async () => { + // Get mock api response + const mockEmptyResponse = { + data: [], + } + jest.spyOn(axios, 'post').mockResolvedValueOnce(mockEmptyResponse) + + render() + + const errorText = await screen.findByTestId('error-text') + expect(errorText).toBeInTheDocument() + }) }) From a8f2310058bd30a8a13814b4138df205946e1dfc Mon Sep 17 00:00:00 2001 From: zesuma Date: Thu, 22 Sep 2022 11:09:37 -0400 Subject: [PATCH 098/130] final sidebar padding adjustemnt --- website/src/css/custom.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/src/css/custom.css b/website/src/css/custom.css index 70896d632d5..1bcfdbe24eb 100644 --- a/website/src/css/custom.css +++ b/website/src/css/custom.css @@ -425,7 +425,7 @@ a.navbar__item.navbar__link.btn:hover { .menu__list .menu__list a.menu__link.menu__link--sublist { font-weight: var(--ifm-font-weight-semibold); - margin: 1rem; + padding: 1rem; } .menu__list-item-collapsible .menu__link--active { From 8abc32dd8ab82128db771ab1513087da3ccee2a0 Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Thu, 22 Sep 2022 11:09:44 -0400 Subject: [PATCH 099/130] merge current and remove examples from Jinja page --- website/docs/faqs/Jinja/which-jinja-docs.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/website/docs/faqs/Jinja/which-jinja-docs.md b/website/docs/faqs/Jinja/which-jinja-docs.md index d41b5220c8a..5272509e8b4 100644 --- a/website/docs/faqs/Jinja/which-jinja-docs.md +++ b/website/docs/faqs/Jinja/which-jinja-docs.md @@ -10,8 +10,3 @@ If you are stuck with a Jinja issue, it can get confusing where to check for mor 1. [Jinja's Template Designer Docs](https://jinja.palletsprojects.com/page/templates/): This is the best reference for most of the Jinja you'll use 2. [Our Jinja function reference](/docs/building-a-dbt-project/jinja-macros#related-reference-docs): This documents any additional functionality we've added to Jinja in dbt. 3. [Agate's table docs](https://agate.readthedocs.io/page/api/table.html): If you're operating on the result of a query, dbt will pass it back to you as an agate table. This means that the methods you call on the belong to the Agate library rather than Jinja or dbt. - - - - - From 5a2251ad016bfc22eea34de4eaf29ddc4aa51e8a Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Thu, 22 Sep 2022 11:13:05 -0400 Subject: [PATCH 100/130] add forum to Learn dropdown in nav --- website/docusaurus.config.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js index 62209abfa40..bd6bbcdd8ba 100644 --- a/website/docusaurus.config.js +++ b/website/docusaurus.config.js @@ -133,10 +133,10 @@ var siteSettings = { label: 'Glossary', to: '/glossary', }, - // { - // label: 'Forum', - // to: '/forum', - // }, + { + label: 'Forum', + to: '/forum', + }, ], }, // { From 7bc14cfef811e5babcd1e3857d78cc7543e8fb7b Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Thu, 22 Sep 2022 11:29:25 -0400 Subject: [PATCH 101/130] Revert "DevHub top navigation updates" --- website/docusaurus.config.js | 76 ++++++++++++++++++++++-------------- website/src/css/custom.css | 55 ++------------------------ 2 files changed, 50 insertions(+), 81 deletions(-) diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js index 62209abfa40..ebdea716aea 100644 --- a/website/docusaurus.config.js +++ b/website/docusaurus.config.js @@ -114,46 +114,64 @@ var siteSettings = { activeBasePath: 'reference' }, { - label: 'Learn', + to: '/dbt-cli/cli-overview', + label: 'dbt CLI', + position: 'left', + activeBasePath: 'dbt-cli' + }, + { + to: '/docs/dbt-cloud/cloud-overview', + label: 'dbt Cloud', + position: 'left', + activeBasePath: 'docs/dbt-cloud' + }, + { + to: '/guides/getting-started', + label: 'Guides', + position: 'left', + activeBasePath: 'guides' + }, + { + to: '/blog/', + label: 'Developer Blog', + position: 'right', + activeBasePath: 'blog' + }, + { + label: 'Courses', position: 'right', items: [ { - label: 'Courses', + label: 'Online courses', href: 'https://courses.getdbt.com', }, { - label: 'Guides', - to: '/guides/getting-started', + label: 'Live courses', + href: 'https://learn.getdbt.com/public', + } + ], + }, + { + label: 'Community', + position: 'right', + items: [ + { + label: 'Maintaining a Slack Channel', + to: '/community/maintaining-a-channel', }, { - label: 'Developer Blog', - to: '/blog', + label: 'dbt Slack', + href: 'https://community.getdbt.com/', }, { - label: 'Glossary', - to: '/glossary', + label: 'Blog', + href: 'https://blog.getdbt.com', }, - // { - // label: 'Forum', - // to: '/forum', - // }, - ], - }, - // { - // label: 'Community', - // position: 'right', - // items: [ - // { - // label: 'Maintaining a Slack Channel', - // to: '/community/maintaining-a-channel', - // }, - // ] - // }, - { - label: 'Create a free account', - to: 'https://www.getdbt.com/signup/', - position: 'right', - className: 'nav-create-account button button--primary', + { + label: 'GitHub', + href: 'https://github.com/dbt-labs/dbt-core', + }, + ] }, ], }, diff --git a/website/src/css/custom.css b/website/src/css/custom.css index 08ed95621b0..cc3b1680408 100644 --- a/website/src/css/custom.css +++ b/website/src/css/custom.css @@ -196,7 +196,7 @@ a.code-link:hover { .navbar__link { font-size: .875rem; - margin: 0 var(--ifm-navbar-item-padding-horizontal) 0; + margin: var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal) 0; padding: 0; border-bottom: 1px solid transparent; } @@ -218,36 +218,6 @@ a.code-link:hover { justify-content: center; } -.navbar-sidebar .menu__link.nav-create-account { - color: var(--color-white); - border: none; -} -.navbar-sidebar .menu__link.nav-create-account:hover { - color: var(--color-white); - background: var(--color-light-teal); -} -.navbar__items .navbar__link.nav-create-account { - color: var(--color-white); - height: 30px; - align-self: auto; - padding: 0 12px; - margin-top: 0; - margin-left: 0; - border: none; - order: 3; -} -.navbar__items .navbar__link.nav-create-account:hover { - background: var(--color-light-teal); -} - -/* Reorder search and darkmode toggle */ -.navbar__items.navbar__items--right div[class^="searchBox"] { - order: 2; -} -.navbar__items.navbar__items--right div[class^="toggle"] { - order: 4; -} - .dropdown__link:hover { cursor: pointer; } @@ -281,19 +251,7 @@ a.code-link:hover { margin-right: .75em; } -/* moon/sun icons for dark/light mode */ -html[data-theme=light] svg[class^="lightToggleIcon_"] { - display: none; -} -html[data-theme=light] svg[class^="darkToggleIcon_"] { - display: block; -} -html[data-theme=dark] svg[class^="lightToggleIcon_"] { - display: block; -} -html[data-theme=dark] svg[class^="darkToggleIcon_"] { - display: none; -} +/* moon/sun icons for dark/light mode - HIDE UNTIL SWIZZLE - These styles get overridden on live site */ /* input.toggleScreenReader_node_modules-\@docusaurus-theme-classic-lib-next-theme-ColorModeToggle-styles-module::after { width: 100%; height: 100%; @@ -676,7 +634,7 @@ div .toggle_src-components-faqs-styles-module { } .card.large .button:hover { - background: var(--color-white); + background: #fff; border-color: var(--color-white); color: var(--color-green-blue); } @@ -992,7 +950,6 @@ filter: opacity(.75); button.DocSearch-Button { border: 1px solid #95a0b1; border-radius: 5px; - height: 30px; } button.DocSearch-Button:active, @@ -1003,12 +960,6 @@ filter: opacity(.75); box-shadow: var(--docsearch-searchbox-shadow); border: 1px solid var(--ifm-link-color); } - - [data-theme='dark'] button.DocSearch-Button:active, - [data-theme='dark'] button.DocSearch-Button:focus, - [data-theme='dark'] button.DocSearch-Button:hover { - background: #ffffff10; - } button .DocSearch-Button-Placeholder { font-size: .875rem; From 5c32c98acce1510a07c7f73b1435d5f2cfb0785e Mon Sep 17 00:00:00 2001 From: zesuma Date: Thu, 22 Sep 2022 11:32:20 -0400 Subject: [PATCH 102/130] shrink padding on footer to 30px --- website/src/css/custom.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/src/css/custom.css b/website/src/css/custom.css index 1bcfdbe24eb..423b99b9a6d 100644 --- a/website/src/css/custom.css +++ b/website/src/css/custom.css @@ -19,7 +19,7 @@ --ifm-navbar-height: 85px; --ifm-navbar-link-hover-color: var(--color-orange); --ifm-navbar-link-active-color: var(--color-orange); - --ifm-footer-padding-vertical: calc(var(--ifm-spacing-vertical) * 3.75); + --ifm-footer-padding-vertical: calc(var(--ifm-spacing-vertical) * 1.875); --ifm-footer-background-color: #4f5d75; --ifm-footer-color: var(--color-white); --ifm-link-color: #009999; From eb090e2365d9ad20fb3f6dd1bad3a1bde6ca46a9 Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Thu, 22 Sep 2022 11:40:44 -0400 Subject: [PATCH 103/130] remove false package-lock --- package-lock.json | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 058db9205e2..00000000000 --- a/package-lock.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "docs.getdbt.com", - "lockfileVersion": 2, - "requires": true, - "packages": {} -} From c16e6a4b4f763ec95737df64e242584217498308 Mon Sep 17 00:00:00 2001 From: zesuma Date: Thu, 22 Sep 2022 12:02:12 -0400 Subject: [PATCH 104/130] shrink footer padding to 30px --- website/src/css/custom.css | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/website/src/css/custom.css b/website/src/css/custom.css index 14f617d9eb6..f71abb868ed 100644 --- a/website/src/css/custom.css +++ b/website/src/css/custom.css @@ -948,7 +948,11 @@ filter: opacity(.75); } @media (min-width: 997px) and (max-width: 1729px) { - .container .row .col { + .container > .row .col { + padding-left: 2.5rem; + } + /* for non row divs like on /category/adapter-development */ + .container > div:not(.row) { padding-left: 2.5rem; } } From 2315f2cbd902d8ed77c52789c4b5ac94f9c09d85 Mon Sep 17 00:00:00 2001 From: zesuma Date: Thu, 22 Sep 2022 12:45:49 -0400 Subject: [PATCH 105/130] put darkmode icon back to right side --- website/src/css/custom.css | 34 ---------------------------------- 1 file changed, 34 deletions(-) diff --git a/website/src/css/custom.css b/website/src/css/custom.css index f71abb868ed..8ebf7f65cfe 100644 --- a/website/src/css/custom.css +++ b/website/src/css/custom.css @@ -301,40 +301,6 @@ a.code-link:hover { justify-content: center; } -.navbar-sidebar .menu__link.nav-create-account { - color: var(--color-white); - border: none; -} -.navbar-sidebar .menu__link.nav-create-account:hover { - color: var(--color-white); - background: var(--color-light-teal); -} -.navbar__items .navbar__link.nav-create-account { - color: var(--color-white); - height: 35px; - align-self: auto; - padding: 0 12px; - margin-top: 0; - margin-left: 0; - border: none; - order: 3; -} -.navbar__items .navbar__link.nav-create-account:hover { - background: var(--color-light-teal); -} - -/* Reorder search and darkmode toggle */ -.navbar__items.navbar__items--right div[class^="searchBox"] { - order: 2; -} -.navbar__items.navbar__items--right div[class^="toggle"] { - order: 4; -} - -.dropdown__link:hover { - cursor: pointer; -} - /* Search Button Styles */ .search { width: 100%; From a43c67af34cb24851513681dc89eb754968668af Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Thu, 22 Sep 2022 17:52:25 +0100 Subject: [PATCH 106/130] Update website/docs/docs/dbt-cloud/release-notes/05-Sept-2002/liststeps-endpoint-deprecation.md Co-authored-by: Ly Nguyen <107218380+nghi-ly@users.noreply.github.com> --- .../05-Sept-2002/liststeps-endpoint-deprecation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/dbt-cloud/release-notes/05-Sept-2002/liststeps-endpoint-deprecation.md b/website/docs/docs/dbt-cloud/release-notes/05-Sept-2002/liststeps-endpoint-deprecation.md index fc205be2065..02855703472 100644 --- a/website/docs/docs/dbt-cloud/release-notes/05-Sept-2002/liststeps-endpoint-deprecation.md +++ b/website/docs/docs/dbt-cloud/release-notes/05-Sept-2002/liststeps-endpoint-deprecation.md @@ -6,7 +6,7 @@ sidebar_label: "Deprecation: List Steps API endpoint" tags: [Sept-15-2022] --- -On October 14th, 2022 we are deprecating the [List Steps](https://docs.getdbt.com/dbt-cloud/api-v2#tag/Runs/operation/listSteps) API endpoint. From October 14th, any GET requests to this endpoint will fail. Please prepare to move off of the List Steps endpoint as soon as possible. +On October 14th, 2022 dbt Labs is deprecating the [List Steps](https://docs.getdbt.com/dbt-cloud/api-v2#tag/Runs/operation/listSteps) API endpoint. From October 14th, any GET requests to this endpoint will fail. Please prepare to stop using the List Steps endpoint as soon as possible. We will continue to maintain the [Get Run](https://docs.getdbt.com/dbt-cloud/api-v2#tag/Runs/operation/getRunById) endpoint, which is a viable alternative depending on the use case. From 9c70fa5d5c6a96016fd29c2d03661fe326a7e10d Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Thu, 22 Sep 2022 17:52:34 +0100 Subject: [PATCH 107/130] Update website/docs/docs/dbt-cloud/release-notes/05-Sept-2002/liststeps-endpoint-deprecation.md Co-authored-by: Ly Nguyen <107218380+nghi-ly@users.noreply.github.com> --- .../05-Sept-2002/liststeps-endpoint-deprecation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/dbt-cloud/release-notes/05-Sept-2002/liststeps-endpoint-deprecation.md b/website/docs/docs/dbt-cloud/release-notes/05-Sept-2002/liststeps-endpoint-deprecation.md index 02855703472..07eb72986f2 100644 --- a/website/docs/docs/dbt-cloud/release-notes/05-Sept-2002/liststeps-endpoint-deprecation.md +++ b/website/docs/docs/dbt-cloud/release-notes/05-Sept-2002/liststeps-endpoint-deprecation.md @@ -8,7 +8,7 @@ tags: [Sept-15-2022] On October 14th, 2022 dbt Labs is deprecating the [List Steps](https://docs.getdbt.com/dbt-cloud/api-v2#tag/Runs/operation/listSteps) API endpoint. From October 14th, any GET requests to this endpoint will fail. Please prepare to stop using the List Steps endpoint as soon as possible. -We will continue to maintain the [Get Run](https://docs.getdbt.com/dbt-cloud/api-v2#tag/Runs/operation/getRunById) endpoint, which is a viable alternative depending on the use case. +dbt Labs will continue to maintain the [Get Run](https://docs.getdbt.com/dbt-cloud/api-v2#tag/Runs/operation/getRunById) endpoint, which is a viable alternative depending on the use case. You can fetch run steps for an individual run with a GET request to the following URL: From 429b63450815533ff12bbcf82817efbe26d9171b Mon Sep 17 00:00:00 2001 From: Anders Date: Thu, 22 Sep 2022 20:33:24 -0400 Subject: [PATCH 108/130] Nikhil feedback --- website/docs/docs/supported-data-platforms.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/website/docs/docs/supported-data-platforms.md b/website/docs/docs/supported-data-platforms.md index 4ef5e5fa5bc..d3957732d82 100644 --- a/website/docs/docs/supported-data-platforms.md +++ b/website/docs/docs/supported-data-platforms.md @@ -9,7 +9,7 @@ To learn more about adapters, check out ["What Are Adapters"](contributing/adapt ## Adapter Installation -With two exceptions [^1], all adapters listed below can be installed from PyPI using `pip install `. The installation will include `dbt-core` and any other required dependencies, which may include other adapter plugins. Read more about [installing dbt](dbt-cli/install/overview). +With a few exceptions [^1], all adapters listed below can be installed from PyPI using `pip install `. The installation will include `dbt-core` and any other required dependencies, which may include both other dependencies and even other adapter plugins. Read more about [installing dbt](dbt-cli/install/overview). ## Adapter Taxonomy @@ -26,13 +26,12 @@ We have two tiers for dbt-core adapters: "Verified" and "Community". Who made and maintains and adapter is certainly relevant, but we recommend using an adapter's verification status to determine quality and health of an adapter. So far we have three categories of maintainers: -| Supported by | Description | +| Supported by | Maintained By | | ------------ | -------------------------------------------------------------------------------------------------------------------------- | -| dbt Labs | dbt Labs maintains a set of adapters for some of the most common databases, warehouses, and platforms. | +| dbt Labs | dbt Labs maintains a set of adapter plugins for some of the most common databases, warehouses, and platforms. As for why particular data platforms were chosen, see ["Why Verify an Adapter"](7-verifying-a-new-adapter#why-verify-an-adapter) | | Partner | These adapter plugins are built and maintained by the same people who build and maintain the complementary data technology | | Community | These adapter plugins are contributed and maintained by members of the community 🌱 | -Note that, while no community plugins are currently supported in dbt Cloud, we expect this to change in the near future. ## Supported Data Platforms @@ -40,7 +39,7 @@ Note that, while no community plugins are currently supported in dbt Cloud, we e ### Verified Adapters -| Data Platform | Adapter Repository | latest verified version | Cloud support | Profile Setup | Configuration | Slack Channel | Maintained By | +| Data Platform | Adapter Repository | latest verified version | Enabled in dbt Cloud | Profile Setup | Configuration | dbt Community Slack channel | Maintained By | | ----------------- | -------------------------------------------------------------- | ------------------------ | ------------------ | ---------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------------------- | ------------- | | AlloyDB | [dbt-postgres](https://github.com/dbt-labs/dbt-postgres) | (same as `dbt-postgres`) | :white_check_mark: | [AlloyDB Profile](alloydb-profile) | | [#db-postgres](https://getdbt.slack.com/archives/C0172G2E273) | n/a | | BigQuery | [dbt-bigquery](https://github.com/dbt-labs/dbt-bigquery) | 1.2.0 | :white_check_mark: | [BigQuery Profile](bigquery-profile) | [BigQuery Configs](bigquery-configs) | [#db-bigquery](https://getdbt.slack.com/archives/C99SNSRTK) | dbt Labs | @@ -56,7 +55,7 @@ Note that, while no community plugins are currently supported in dbt Cloud, we e | Data Platform | Adapter Repository | Profile Setup | Configuration | Slack Channel | Maintained By | | ---------------------- | ----------------------------------------------------------------------------------------------- | ------------------------------------------ | ------------------------------------------ | ----------------------------------------------------------------- | ------------- | | Athena | [dbt-athena](https://github.com/Tomme/dbt-athena) | [Athena Profile](athena-profile) | | [#db-athena](https://getdbt.slack.com/archives/C013MLFR7BQ) | Community | -| ClickHouse | [dbt-clickhouse](https://github.com/ClickHouse/dbt-clickhouse) | [Clickhouse Profile](clickhouse-profile) | [Clickhouse Configs](clickhouse-configs) | [#db-redshift](https://getdbt.slack.com/archives/C01DRQ178LQ) | Clickhouse | +| ClickHouse | [dbt-clickhouse](https://github.com/ClickHouse/dbt-clickhouse) | [Clickhouse Profile](clickhouse-profile) | [Clickhouse Configs](clickhouse-configs) | [#db-clickhouse](https://getdbt.slack.com/archives/C03KVDLMNV6) | Clickhouse | | IBM DB2 | [dbt-ibmdb2](https://github.com/aurany/dbt-ibmdb2) | [DB2 Profile](ibmdb2-profile) | | n/a | Community | | DuckDB | [dbt-duckdb](https://github.com/jwills/dbt-duckdb/) | [DuckDB Profile](duckdb-profile) | | [#db-duckdb](https://getdbt.slack.com/archives/C039D1J1LA2) | Community | | Dremio | [dbt-dremio](https://github.com/fabrice-etanchaud/dbt-dremio/) | [Dremio Profile](dremio-profile) | | n/a | Community | @@ -67,7 +66,7 @@ Note that, while no community plugins are currently supported in dbt Cloud, we e | Hive | [dbt-hive](https://github.com/cloudera/dbt-hive) | [Hive Profile](hive-profile) | [Hive Configs](hive-configs) | [#db-hive](https://getdbt.slack.com/archives/C0401DTNSKW) | Cloudera | | Impala | [dbt-impala](https://github.com/cloudera/dbt-impala) | [Impala Profile](impala-profile) | [Impala Configs](impala-configs) | [#db-impala](https://getdbt.slack.com/archives/C03K2PTHHTP) | Cloudera | | iomete | [dbt-iomete](https://github.com/iomete/dbt-iomete) | [iomete Profile](iomete-profile) | | [#db-iomete](https://getdbt.slack.com/archives/C03JFG22EP9) | Iomete | -| Layer Bigquery | [dbt-layer](https://github.com/layerai/dbt-layer) | [Layer Profile](layer-profile) | | [#tools-layer](https://getdbt.slack.com/archives/C03STA39TFE) | Layer AI | +| Layer | [dbt-layer](https://github.com/layerai/dbt-layer) | [Layer Profile](layer-profile) | | [#tools-layer](https://getdbt.slack.com/archives/C03STA39TFE) | Layer AI | | Materialize | [dbt-materialize](https://github.com/MaterializeInc/materialize/blob/main/misc/dbt-materialize) | [Materialize Profile](materialize-profile) | [Materialize Configs](materialize-configs) | [#db-materialize](https://getdbt.slack.com/archives/C01PWAH41A5) | Materialize | | MindsDB | [dbt-mindsdb](https://github.com/mindsdb/dbt-mindsdb) | [MindsDB Profile](mindsdb-profile) | [MindsDB Configs](mindsdb-configs) | n/a | MindsDB | | MySQL | [dbt-mysql](https://github.com/dbeatty10/dbt-mysql) | [MySQL Profile](mysql-profile) | | [#db-mysql-family](https://getdbt.slack.com/archives/C03BK0SHC64) | Community | From 72b77414b97fc24d172f22693b492de395fef5b2 Mon Sep 17 00:00:00 2001 From: Anders Date: Thu, 22 Sep 2022 20:55:18 -0400 Subject: [PATCH 109/130] Apply suggestions from code review --- website/docs/docs/supported-data-platforms.md | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/website/docs/docs/supported-data-platforms.md b/website/docs/docs/supported-data-platforms.md index d3957732d82..9391f58ab63 100644 --- a/website/docs/docs/supported-data-platforms.md +++ b/website/docs/docs/supported-data-platforms.md @@ -15,12 +15,9 @@ With a few exceptions [^1], all adapters listed below can be installed from PyPI ### Verified by dbt Labs -We have two tiers for dbt-core adapters: "Verified" and "Community". +In order to provide a more consistent and reliable experience, dbt Labs now has a rigorous process by which we verify adapter plugins. The process covers aspects of development, documentation, user experience and maintenance. These adapters earn a "Verified" designation so that users can have a certain level of trust and expectation when they use them. To learn more see ["Verifying a new adapter](7-verifying-a-new-adapter") -| Tier | Relevant adapters | -| --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Verified | The adapters:
      • maintained by dbt Labs as well as
      • partner-maintained adapters that have been verified by dbt Labs
      • | -| Community |
      • All other partner-maintained adapters as well as
      • all community adapters.
      • Community adapters in particular tend to be works-in-progress. Contributions from users are highly encouraged (see ["Contributing to a pre-existing adapter"](#contributing-to-a-pre-existing-adapter)) | +We also welcome and encourage adapter plugins from the dbt community (see the below ["Contributing to a pre-existing adapter"](#contributing-to-a-pre-existing-adapter)). Please note that these community maintainers are intrepid volunteers who owe you nothing, but give anyway -- so be kind and understanding, and help out where you can! ### Maintainers From 85c6a388356bb6a09d2d43dabf79f12cc15b785b Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Fri, 23 Sep 2022 11:58:16 +0100 Subject: [PATCH 110/130] Update mssql-profile.md --- .../warehouse-profiles/mssql-profile.md | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/website/docs/reference/warehouse-profiles/mssql-profile.md b/website/docs/reference/warehouse-profiles/mssql-profile.md index 0f2b0b5a8db..76da22c5f95 100644 --- a/website/docs/reference/warehouse-profiles/mssql-profile.md +++ b/website/docs/reference/warehouse-profiles/mssql-profile.md @@ -62,10 +62,11 @@ your_profile_name: outputs: dev: type: sqlserver - driver: 'ODBC Driver 17 for SQL Server' # (The ODBC Driver installed on your system) - server: hostname or IP of your server + driver: 'ODBC Driver 17 for SQL Server' (The ODBC Driver installed on your system) + server: server-host-name or ip port: 1433 - schema: schema_name + database: database + schema: schemaname user: username password: password ``` @@ -79,17 +80,9 @@ your_profile_name: -```yml -type: sqlserver -driver: 'ODBC Driver 17 for SQL Server' (The ODBC Driver installed on your system) -server: server-host-name or ip -port: 1433 -database: database -schema: schemaname -user: username -password: password +``` -```yaml +yaml your_profile_name: target: dev outputs: From c239e3fa6eeee7b54b1fce22015fdb0a58ab6553 Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Fri, 23 Sep 2022 12:02:52 +0100 Subject: [PATCH 111/130] Update mssql-profile.md --- website/docs/reference/warehouse-profiles/mssql-profile.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/website/docs/reference/warehouse-profiles/mssql-profile.md b/website/docs/reference/warehouse-profiles/mssql-profile.md index 76da22c5f95..1e06686e7f6 100644 --- a/website/docs/reference/warehouse-profiles/mssql-profile.md +++ b/website/docs/reference/warehouse-profiles/mssql-profile.md @@ -80,9 +80,7 @@ your_profile_name: -``` - -yaml +```yaml your_profile_name: target: dev outputs: @@ -93,7 +91,6 @@ your_profile_name: port: 1433 schema: schema_name windows_login: True - ``` From 5f707834ab2301ddbedbdaa4cb5ff152113c5b92 Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Fri, 23 Sep 2022 12:12:47 +0100 Subject: [PATCH 112/130] Update website/docs/reference/warehouse-profiles/mssql-profile.md --- website/docs/reference/warehouse-profiles/mssql-profile.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/reference/warehouse-profiles/mssql-profile.md b/website/docs/reference/warehouse-profiles/mssql-profile.md index 1e06686e7f6..bde5a76843f 100644 --- a/website/docs/reference/warehouse-profiles/mssql-profile.md +++ b/website/docs/reference/warehouse-profiles/mssql-profile.md @@ -66,7 +66,7 @@ your_profile_name: server: server-host-name or ip port: 1433 database: database - schema: schemaname + schema: schema_name user: username password: password ``` From 588506b523c61ab4d678c5fe4f34c099d53e1525 Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Fri, 23 Sep 2022 12:13:37 +0100 Subject: [PATCH 113/130] Update website/docs/reference/warehouse-profiles/mssql-profile.md --- website/docs/reference/warehouse-profiles/mssql-profile.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/reference/warehouse-profiles/mssql-profile.md b/website/docs/reference/warehouse-profiles/mssql-profile.md index bde5a76843f..1fdd08d3453 100644 --- a/website/docs/reference/warehouse-profiles/mssql-profile.md +++ b/website/docs/reference/warehouse-profiles/mssql-profile.md @@ -62,7 +62,7 @@ your_profile_name: outputs: dev: type: sqlserver - driver: 'ODBC Driver 17 for SQL Server' (The ODBC Driver installed on your system) + driver: 'ODBC Driver 17 for SQL Server' # (The ODBC Driver installed on your system) server: server-host-name or ip port: 1433 database: database From 99cea4f884e8e79e72874c75983098ed541e4342 Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Fri, 23 Sep 2022 12:16:26 +0100 Subject: [PATCH 114/130] Update website/docs/reference/warehouse-profiles/mssql-profile.md --- website/docs/reference/warehouse-profiles/mssql-profile.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/reference/warehouse-profiles/mssql-profile.md b/website/docs/reference/warehouse-profiles/mssql-profile.md index 1fdd08d3453..b27304d8f5b 100644 --- a/website/docs/reference/warehouse-profiles/mssql-profile.md +++ b/website/docs/reference/warehouse-profiles/mssql-profile.md @@ -63,7 +63,7 @@ your_profile_name: dev: type: sqlserver driver: 'ODBC Driver 17 for SQL Server' # (The ODBC Driver installed on your system) - server: server-host-name or ip + server: hostname or IP of your server port: 1433 database: database schema: schema_name From 98dadad7fccd02d2553f55c897a0770eddcf15f8 Mon Sep 17 00:00:00 2001 From: johnblust <97988576+johnblust@users.noreply.github.com> Date: Fri, 23 Sep 2022 09:48:30 -0400 Subject: [PATCH 115/130] add content --- website/docs/terms/json.md | 103 +++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 website/docs/terms/json.md diff --git a/website/docs/terms/json.md b/website/docs/terms/json.md new file mode 100644 index 00000000000..4d492ff8e4e --- /dev/null +++ b/website/docs/terms/json.md @@ -0,0 +1,103 @@ +--- +id: json +title: JSON +description: JSON (JavaScript Object Notation) is a minimal format for semi-structured data used to capture relationships between fields and values. +displayText: JSON +hoverSnippet: JSON (JavaScript Object Notation) is a minimal format for semi-structured data used to capture relationships between fields and values. +--- + +JSON stands for JavaScript Object Notation. JSON is a minimal format which is great for processing data for applications. It can capture many types of relationships in a concise format. It’s a commonly used format for semi-structured data. The tables in your contain structured data (as opposed to semi-structured). For each row, each field typically contains one value. Structured data, or tabular data, is intuitive and easy to read, but semi-structured data offers more flexibility. + +Let’s talk through what that looks like in practice so we can get a better sense of what we mean. + +## JSON syntax example + +When looking at data formatted in JSON, we say that the data is stored in **JSON objects**. These are composed of key-value pairs. JSON objects are enclosed in curly brackets (`{ }`) and each key-value pair is separated by a comma. Here’s an example: + +```json +order = {"customer_id":2947, "order_id":4923, "order_items":"cheesecake"}` +``` + +Order is the JSON object. `"customer_id":2947` is one of the key-value pairs within this JSON object. + +If I wanted to find the customer_id, I could return that value with `order[“customer_id”]` or `order.customer_id`. It’s easy for us to simply read the customer_id just by looking at the JSON object in this example, but what if your JSON object contains hundreds of key-value pairs or complex nesting? Being aware of how to pull information out of JSON is essential if you’re working with it in the wild. + +A key feature of JSON is that it can contain data types that aren’t normally found in relational databases, namely **dictionaries** and **arrays**. Let’s break down what that means and then we’ll look at an example to pull everything together. + +### Dictionaries and arrays in JSON + +JSON inherits its syntax from JavaScript (JS) so dictionaries and arrays are formatted in the same way as they are in JS. Dictionaries are formatted just like JSON objects and consist of key-value pairs. Arrays are lists of values. They’re enclosed in square brackets (`[ ]`) and each value is separated by a comma, like so: + +```json +menu_items = ["cheesecake", "danish", "coffee"] +``` + +Individual values from an array can be called by referencing the location of a value within the array. Arrays are zero-indexed which means that the first item is at position 0 and we count up from there. + +- `menu_items[0]` will return “cheesecake” +- `menu_items[1]` will return “danish” +- `menu_items[2]` will return “coffee” + +Dictionaries and arrays can be nested in JSON objects as well as nested in each other. **Dictionaries and arrays can only be values. They can never be keys.** + +Here’s an example of a JSON object describing a tweet from [Twitter’s developer platform](https://developer.twitter.com/en/docs/twitter-api/v1/data-dictionary/overview). + +```json +tweet = +{ + "created_at": "Thu Apr 06 15:24:15 +0000 2017", + "id_str": "850006245121695744", + "text": "1\/ Today we\u2019re sharing our vision for the future of the Twitter API platform!\nhttps:\/\/t.co\/XweGngmxlP", + "user": { + "id": 2244994945, + "name": "Twitter Dev", + "screen_name": "TwitterDev", + "location": "Internet", + "url": "https:\/\/dev.twitter.com\/", + "description": "Your official source for Twitter Platform news, updates & events. Need technical help? Visit https:\/\/twittercommunity.com\/ \u2328\ufe0f #TapIntoTwitter" + }, + "place": { + }, + "entities": { + "hashtags": [ + ], + "urls": [ + { + "url": "https:\/\/t.co\/XweGngmxlP", + "unwound": { + "url": "https:\/\/cards.twitter.com\/cards\/18ce53wgo4h\/3xo1c", + "title": "Building the Future of the Twitter API Platform" + } + } + ], + "user_mentions": [ + ] + } +} +``` + +Here's a quick quiz to see if you're understanding the file's structure: + +
        +How would you call the user ID? +tweet[‘user’][‘id’] +
        + +
        +How would you call the unwound url? +Tweet[‘entities’][‘urls’][0][‘unwound’][‘url’] +
        + +As you can see, JSON objects can get complex pretty quickly. + +## Why is JSON important in modern analytics? + +Semi-structured data offers flexibility with the trade-off of being more complex. JSON doesn’t require a pre-defined schema. It allows nesting, values can be different data types, and it lends itself well to changes in the shape of the incoming data. As you can imagine, the above Tweet object would look very different if we tried to restructure it so it could fit into a table. It would be hard to read or we would lose information or both. + +## Use cases for JSON + +JSON is lightweight and often used to transfer data over a network connection. As we’ve seen, data from social media sites are often stored as JSON objects. JSON is also commonly how data from IoT sensors is formatted. You’ll often see JSON when using an API. + +## Conclusion + +The greatest strength of JSON also acts as its weakness— the data it contains informs the shape the object takes, rather than the other way around. Structured data is the bread and butter of data, but a semi-structured format is an alternative option when a tabular format becomes too rigid to describe the relationships between different entities. \ No newline at end of file From a95a390580d3f38d324b65e968c09dbc296b03e6 Mon Sep 17 00:00:00 2001 From: johnblust <97988576+johnblust@users.noreply.github.com> Date: Fri, 23 Sep 2022 09:58:05 -0400 Subject: [PATCH 116/130] add internal linking --- ...-01-how-to-create-near-real-time-models-with-just-dbt-sql.md | 2 +- website/blog/2021-11-29-open-source-community-growth.md | 2 +- website/blog/2022-04-14-add-ci-cd-to-bitbucket.md | 2 +- ...2022-05-03-making-dbt-cloud-api-calls-using-dbt-cloud-cli.md | 2 +- website/blog/2022-07-26-pre-commit-dbt.md | 2 +- website/blog/2022-08-31-august-product-update.md | 2 +- .../building-a-dbt-project/building-models/using-variables.md | 2 +- website/docs/docs/building-a-dbt-project/snapshots.md | 2 +- .../cloud-configuring-dbt-cloud/cloud-upgrading-dbt-versions.md | 2 +- .../cloud-configuring-dbt-cloud/connecting-your-database.md | 2 +- website/docs/docs/dbt-cloud/on-premises/usage-statistics.md | 2 +- .../getting-started/getting-set-up/setting-up-bigquery.md | 2 +- .../migration/versions/11-Older versions/upgrading-to-0-19-0.md | 2 +- website/docs/reference/artifacts/dbt-artifacts.md | 2 +- website/docs/reference/commands/source.md | 2 +- website/docs/reference/events-logging.md | 2 +- website/docs/reference/global-configs.md | 2 +- website/docs/reference/project-configs/query-comment.md | 2 +- website/docs/terms/data-warehouse.md | 2 +- website/docs/terms/dataframe.md | 2 +- website/docs/terms/elt.md | 2 +- website/snippets/tutorial-document-your-models.md | 2 +- 22 files changed, 22 insertions(+), 22 deletions(-) diff --git a/website/blog/2020-07-01-how-to-create-near-real-time-models-with-just-dbt-sql.md b/website/blog/2020-07-01-how-to-create-near-real-time-models-with-just-dbt-sql.md index 0203181fb7a..944d6fdd3f9 100644 --- a/website/blog/2020-07-01-how-to-create-near-real-time-models-with-just-dbt-sql.md +++ b/website/blog/2020-07-01-how-to-create-near-real-time-models-with-just-dbt-sql.md @@ -27,7 +27,7 @@ So when presented with a near-real-time modeling request, I (and you as well!) h Recently I was working on a JetBlue project and was presented with a legitimate use case: operational data. JetBlue’s Crewmembers need to make real-time decisions on when to close the door to a flight or rebook a flight. If you have ever been to an airport when there is a flight delay, you know how high the tension is in the room for airline employees to make the right decisions. They literally cannot do their jobs without real-time data. -If possible, the best thing to do is to query data as close to the source as possible. You don’t want to hit your production database unless you want to frighten and likely anger your DBA. Instead, the preferred approach is to replicate the source data to your analytics warehouse, which would provide a suitable environment for analytic queries. In JetBlue’s case, the data arrives in JSON blobs, which then need to be unnested, transformed, and joined before the data becomes useful for analysis. There was no way to just query from the source to get the information people required. +If possible, the best thing to do is to query data as close to the source as possible. You don’t want to hit your production database unless you want to frighten and likely anger your DBA. Instead, the preferred approach is to replicate the source data to your analytics warehouse, which would provide a suitable environment for analytic queries. In JetBlue’s case, the data arrives in blobs, which then need to be unnested, transformed, and joined before the data becomes useful for analysis. There was no way to just query from the source to get the information people required. Tldr: If you need transformed, operational data to make in-the-moment decisions then you probably need real-time data. diff --git a/website/blog/2021-11-29-open-source-community-growth.md b/website/blog/2021-11-29-open-source-community-growth.md index ac1b0381f85..a61fa7ac46b 100644 --- a/website/blog/2021-11-29-open-source-community-growth.md +++ b/website/blog/2021-11-29-open-source-community-growth.md @@ -465,7 +465,7 @@ A lineage graph of the entire pipeline can now be viewed in Marquez, which shows This is the simplest part, by far. Since we have a set of tables with clearly-defined measures and dimensions, getting everything working in a system like Apache Superset is straightforward. -Configuring the data source and adding each table to a Preset Workspace was easy. First, I connected my BigQuery database by uploading a JSON key for my service account. +Configuring the data source and adding each table to a Preset Workspace was easy. First, I connected my BigQuery database by uploading a key for my service account. Once the database connection was in place, I created datasets for each of my `*_daily_summary` tables by selecting the database/schema/table from a dropdown. diff --git a/website/blog/2022-04-14-add-ci-cd-to-bitbucket.md b/website/blog/2022-04-14-add-ci-cd-to-bitbucket.md index 36c25a8653a..6cdb20d0df3 100644 --- a/website/blog/2022-04-14-add-ci-cd-to-bitbucket.md +++ b/website/blog/2022-04-14-add-ci-cd-to-bitbucket.md @@ -183,7 +183,7 @@ Reading the file over, you can see that we: 3. Specify that this pipeline is a two-step process 4. Specify that in the first step called “Deploy to production”, we want to: 1. Use whatever pip cache is available, if any - 2. Keep whatever JSON files are generated in this step in target/ + 2. Keep whatever files are generated in this step in target/ 3. Run the dbt setup by first installing dbt as defined in requirements.txt, then adding `profiles.yml` to the location dbt expects them in, and finally running `dbt deps` to install any dbt packages 4. Run `dbt seed`, `run`, and `snapshot`, all with `prod` as specified target 5. Specify that in the first step called “Upload artifacts for slim CI runs”, we want to use the Bitbucket “pipe” (pre-defined action) to authenticate with environment variables and upload all files that match the glob `target/*.json`. diff --git a/website/blog/2022-05-03-making-dbt-cloud-api-calls-using-dbt-cloud-cli.md b/website/blog/2022-05-03-making-dbt-cloud-api-calls-using-dbt-cloud-cli.md index d8337357518..2acd3bed53d 100644 --- a/website/blog/2022-05-03-making-dbt-cloud-api-calls-using-dbt-cloud-cli.md +++ b/website/blog/2022-05-03-making-dbt-cloud-api-calls-using-dbt-cloud-cli.md @@ -53,7 +53,7 @@ dbt-cloud job run --job-id 43167 You probably agree that the latter example is definitely more elegant and easier to read. `dbt-cloud` handles the request boilerplate (e.g., api token in the header, endpoint URL) so that you don’t need to worry about authentication or remember which endpoint to use. Also, the CLI implements additional functionality (e.g., `--wait`) for some endpoints; for example, `dbt cloud job run --wait` will issue the job trigger, wait until the job finishes, fails or is cancelled and then prints out the job status response. -In addition to CLI commands that interact with a single dbt Cloud API endpoint there are composite helper commands that call one or more API endpoints and perform more complex operations. One example of composite commands are `dbt-cloud job export` and `dbt-cloud job import` where, under the hood, the export command performs a `dbt-cloud job get` and writes the job metadata to a JSON file and the import command reads job parameters from a JSON file and calls `dbt-cloud job create`. The export and import commands can be used in tandem to move dbt Cloud jobs between projects. Another example is the `dbt-cloud job delete-all` which fetches a list of all jobs using `dbt-cloud job list` and then iterates over the list prompting the user if they want to delete the job. For each job that the user agrees to delete a `dbt-cloud job delete` is performed. +In addition to CLI commands that interact with a single dbt Cloud API endpoint there are composite helper commands that call one or more API endpoints and perform more complex operations. One example of composite commands are `dbt-cloud job export` and `dbt-cloud job import` where, under the hood, the export command performs a `dbt-cloud job get` and writes the job metadata to a file and the import command reads job parameters from a JSON file and calls `dbt-cloud job create`. The export and import commands can be used in tandem to move dbt Cloud jobs between projects. Another example is the `dbt-cloud job delete-all` which fetches a list of all jobs using `dbt-cloud job list` and then iterates over the list prompting the user if they want to delete the job. For each job that the user agrees to delete a `dbt-cloud job delete` is performed. To install the CLI in your Python environment run `pip install dbt-cloud-cli` and you’re all set. You can use it locally in your development environment or e.g. in a GitHub actions workflow. diff --git a/website/blog/2022-07-26-pre-commit-dbt.md b/website/blog/2022-07-26-pre-commit-dbt.md index fc2ff331478..3873e46e3ae 100644 --- a/website/blog/2022-07-26-pre-commit-dbt.md +++ b/website/blog/2022-07-26-pre-commit-dbt.md @@ -114,7 +114,7 @@ Adding periodic pre-commit checks can be done in 2 different ways, through CI (C The example below will assume GitHub actions as the CI engine but similar behavior could be achieved in any other CI tool. -As described before, we need to run a `dbt docs generate` in order to create updated JSON artifacts used in the pre-commit hooks. +As described before, we need to run a `dbt docs generate` in order to create updated artifacts used in the pre-commit hooks. For that reason, we will need our CI step to execute this command, which will require setting up a `profiles.yml` file providing dbt the information to connect to the data warehouse. Profiles files will be different for each data warehouse ([example here](https://docs.getdbt.com/reference/warehouse-profiles/snowflake-profile)). diff --git a/website/blog/2022-08-31-august-product-update.md b/website/blog/2022-08-31-august-product-update.md index b08076ee99b..5826db17a24 100644 --- a/website/blog/2022-08-31-august-product-update.md +++ b/website/blog/2022-08-31-august-product-update.md @@ -55,7 +55,7 @@ You’ll hear more in [Tristan’s keynote](https://coalesce.getdbt.com/agenda/k I just discovered the treasure trove of excellent resources from dbt Labs consulting partners, and want to start sharing more here. Here’s a few you might have missed over the summer: - **Reduce ETL costs:** I’ve only just seen [this blog](https://www.mighty.digital/blog/how-dbt-helped-us-reduce-our-etl-costs-significantly) from Mighty Digital, but found it to be a super practical (and concise) introductory guide to rethinking your ETL pipeline with dbt. -- **Explore data:** [Part two of a series on exploring data](https://vivanti.com/2022/07/28/exploring-data-with-dbt-part-2-extracting/) brought to you by Vivanti. This post focuses on working with JSON objects in dbt, but I also recommend the preceding post if you want to see how they spun up their stack. +- **Explore data:** [Part two of a series on exploring data](https://vivanti.com/2022/07/28/exploring-data-with-dbt-part-2-extracting/) brought to you by Vivanti. This post focuses on working with objects in dbt, but I also recommend the preceding post if you want to see how they spun up their stack. - **Track historical changes:** [](https://blog.montrealanalytics.com/using-dbt-snapshots-with-dev-prod-environments-e5ed63b2c343)Snapshots are a pretty handy feature for tracking changes in dbt, but they’re often overlooked during initial onboarding. [Montreal Analytics explains how to set them up](https://blog.montrealanalytics.com/using-dbt-snapshots-with-dev-prod-environments-e5ed63b2c343) in dev/prod environments - **Learn dbt:** Have some new faces on the data team that might need an introduction to dbt? Our friends at GoDataDriven are hosting a [virtual dbt Learn Sept 12-14](https://www.tickettailor.com/events/dbtlabs/752537). diff --git a/website/docs/docs/building-a-dbt-project/building-models/using-variables.md b/website/docs/docs/building-a-dbt-project/building-models/using-variables.md index 407f26d6746..72c8ba01298 100644 --- a/website/docs/docs/building-a-dbt-project/building-models/using-variables.md +++ b/website/docs/docs/building-a-dbt-project/building-models/using-variables.md @@ -67,7 +67,7 @@ $ dbt run --vars '{"key": "value"}' ``` The `--vars` argument accepts a YAML dictionary as a string on the command line. -YAML is convenient because it does not require strict quoting as with JSON. +YAML is convenient because it does not require strict quoting as with . Both of the following are valid and equivalent: diff --git a/website/docs/docs/building-a-dbt-project/snapshots.md b/website/docs/docs/building-a-dbt-project/snapshots.md index 84124a50bb3..1e3fe6bc7da 100644 --- a/website/docs/docs/building-a-dbt-project/snapshots.md +++ b/website/docs/docs/building-a-dbt-project/snapshots.md @@ -326,7 +326,7 @@ If you apply business logic in a snapshot query, and this logic changes in the f Basically – keep your query as simple as possible! Some reasonable exceptions to these recommendations include: * Selecting specific columns if the table is wide. -* Doing light transformation to get data into a reasonable shape, for example, unpacking a JSON blob to flatten your source data into columns. +* Doing light transformation to get data into a reasonable shape, for example, unpacking a blob to flatten your source data into columns. ## Snapshot meta-fields diff --git a/website/docs/docs/dbt-cloud/cloud-configuring-dbt-cloud/cloud-upgrading-dbt-versions.md b/website/docs/docs/dbt-cloud/cloud-configuring-dbt-cloud/cloud-upgrading-dbt-versions.md index e8c2dad6f31..ba8b3a60bf2 100644 --- a/website/docs/docs/dbt-cloud/cloud-configuring-dbt-cloud/cloud-upgrading-dbt-versions.md +++ b/website/docs/docs/dbt-cloud/cloud-configuring-dbt-cloud/cloud-upgrading-dbt-versions.md @@ -48,7 +48,7 @@ clean-targets: - Do you select tests using the old names for test types? (`test_type:schema`, `test_type:data`, `--schema`, `--data`) - Do you have custom macro code that calls the (undocumented) global macros `column_list`, `column_list_for_create_table`, `incremental_upsert`? -- Do you have custom scripts that parse dbt JSON artifacts? +- Do you have custom scripts that parse dbt artifacts? - (BigQuery only) Do you use dbt's legacy capabilities around ingestion-time-partitioned tables? If you believe your project might be affected, read more details in the migration guide [here](/guides/migration/versions/upgrading-to-v1.0). diff --git a/website/docs/docs/dbt-cloud/cloud-configuring-dbt-cloud/connecting-your-database.md b/website/docs/docs/dbt-cloud/cloud-configuring-dbt-cloud/connecting-your-database.md index 3d377988159..e10b2bd1e2c 100644 --- a/website/docs/docs/dbt-cloud/cloud-configuring-dbt-cloud/connecting-your-database.md +++ b/website/docs/docs/dbt-cloud/cloud-configuring-dbt-cloud/connecting-your-database.md @@ -114,7 +114,7 @@ more information on configuring a Snowflake OAuth connection in dbt Cloud, pleas :::info Uploading a service account JSON keyfile -While the fields in a BigQuery connection can be specified manually, we recommend uploading a service account JSON keyfile to quickly and accurately configure a connection to BigQuery. +While the fields in a BigQuery connection can be specified manually, we recommend uploading a service account keyfile to quickly and accurately configure a connection to BigQuery. ::: diff --git a/website/docs/docs/dbt-cloud/on-premises/usage-statistics.md b/website/docs/docs/dbt-cloud/on-premises/usage-statistics.md index ad143e48b6e..aa7759aa4b1 100644 --- a/website/docs/docs/dbt-cloud/on-premises/usage-statistics.md +++ b/website/docs/docs/dbt-cloud/on-premises/usage-statistics.md @@ -21,7 +21,7 @@ Usage statistics are tracked once weekly, and include the following information: - The number of developer and read only licenses utilized in each account - The version of dbt Cloud installed in the on-premises environment -This information is sent as a JSON payload to usage.getdbt.com. A typical +This information is sent as a payload to usage.getdbt.com. A typical payload looks like: ```json diff --git a/website/docs/guides/getting-started/getting-set-up/setting-up-bigquery.md b/website/docs/guides/getting-started/getting-set-up/setting-up-bigquery.md index 76907f60a33..01d2d1aa5b7 100644 --- a/website/docs/guides/getting-started/getting-set-up/setting-up-bigquery.md +++ b/website/docs/guides/getting-started/getting-set-up/setting-up-bigquery.md @@ -101,7 +101,7 @@ In order to let dbt connect to your warehouse, you'll need to generate a keyfile 8. Select **Keys**. 9. Click **Add Key** then select **Create new key**. 10. Select **JSON** as the key type then click **Create**. -11. You should be prompted to download the JSON file. Save it locally to an easy-to-remember spot, with a clear filename. For example, `dbt-user-creds.json`. +11. You should be prompted to download the file. Save it locally to an easy-to-remember spot, with a clear filename. For example, `dbt-user-creds.json`. ### Create a dbt Cloud account diff --git a/website/docs/guides/migration/versions/11-Older versions/upgrading-to-0-19-0.md b/website/docs/guides/migration/versions/11-Older versions/upgrading-to-0-19-0.md index cfb5aa445a7..dee59fa7815 100644 --- a/website/docs/guides/migration/versions/11-Older versions/upgrading-to-0-19-0.md +++ b/website/docs/guides/migration/versions/11-Older versions/upgrading-to-0-19-0.md @@ -42,7 +42,7 @@ See [dbt#2961](https://github.com/dbt-labs/dbt-core/pull/2961) for full implemen ## New and changed documentation ### Core -- [dbt Artifacts](dbt-artifacts): The JSON artifacts produced by dbt—manifest, catalog, run results, and sources—are simpler to consume and more clearly documented. +- [dbt Artifacts](dbt-artifacts): The artifacts produced by dbt—manifest, catalog, run results, and sources—are simpler to consume and more clearly documented. - [dbt Classes](dbt-classes#result-objects), [on-run-end Context](on-run-end-context#results): The `Result` object has a new schema, in line with changes to `run_results.json`. - [Statement blocks](statement-blocks): The `call statement` result `status` string is now a structured object named `response`. - [Snapshots](snapshots#invalidate_hard_deletes): If the config `invalidate_hard_deletes` is enabled, `dbt snapshot` will update records whose unique key no longer exist in the snapshot query. Should those uniquely identified records "revive," `dbt snapshot` will re-add them. diff --git a/website/docs/reference/artifacts/dbt-artifacts.md b/website/docs/reference/artifacts/dbt-artifacts.md index a4ab8236670..6ac9f5d004d 100644 --- a/website/docs/reference/artifacts/dbt-artifacts.md +++ b/website/docs/reference/artifacts/dbt-artifacts.md @@ -2,7 +2,7 @@ title: Overview --- -With every invocation, dbt generates and saves one or more *artifacts*. Several of these are JSON files (`manifest.json`, `catalog.json`, `run_results.json`, and `sources.json`) that are used to power: +With every invocation, dbt generates and saves one or more *artifacts*. Several of these are files (`manifest.json`, `catalog.json`, `run_results.json`, and `sources.json`) that are used to power: - [documentation](documentation) - [state](understanding-state) - [visualizing source freshness](cloud-snapshotting-source-freshness) diff --git a/website/docs/reference/commands/source.md b/website/docs/reference/commands/source.md index acf2bec9392..415cff2d3e2 100644 --- a/website/docs/reference/commands/source.md +++ b/website/docs/reference/commands/source.md @@ -39,7 +39,7 @@ $ dbt source freshness --select source:snowplow.event ### Configuring source freshness output -When `dbt source freshness` completes, a JSON file containing information about the freshness of your sources will be saved to `target/sources.json`. An example `sources.json` will look like: +When `dbt source freshness` completes, a file containing information about the freshness of your sources will be saved to `target/sources.json`. An example `sources.json` will look like: diff --git a/website/docs/reference/events-logging.md b/website/docs/reference/events-logging.md index 00dd6e0c20c..679d3a8f9cc 100644 --- a/website/docs/reference/events-logging.md +++ b/website/docs/reference/events-logging.md @@ -34,7 +34,7 @@ With every task that dbt performs, it generates events. It records those events When `json` [log formatting](global-configs#log-formatting) is enabled, dbt will output produce rich, structured log information which can be piped into monitoring tools for analysis, or to power applications with dbt metadata in real time. -Each log line will have the following JSON properties: +Each log line will have the following properties: | Field | Description | |-------------|---------------| diff --git a/website/docs/reference/global-configs.md b/website/docs/reference/global-configs.md index af712354bc1..eaf2ef1785d 100644 --- a/website/docs/reference/global-configs.md +++ b/website/docs/reference/global-configs.md @@ -214,7 +214,7 @@ FailFast Error in model model_1 (models/model_1.sql) ### Log Formatting -The `LOG_FORMAT` config specifies how dbt's logs should be formatted. If the value of this config is `json`, dbt will output fully structured logs in JSON format; otherwise, it will output text-formatted logs that are sparser for the CLI and more detailed in `logs/dbt.log`. +The `LOG_FORMAT` config specifies how dbt's logs should be formatted. If the value of this config is `json`, dbt will output fully structured logs in format; otherwise, it will output text-formatted logs that are sparser for the CLI and more detailed in `logs/dbt.log`. diff --git a/website/docs/reference/project-configs/query-comment.md b/website/docs/reference/project-configs/query-comment.md index 9738ce9fc61..3ce4a4df870 100644 --- a/website/docs/reference/project-configs/query-comment.md +++ b/website/docs/reference/project-configs/query-comment.md @@ -39,7 +39,7 @@ The `query-comment` configuration can also call a macro that returns a string. ## Default -By default, dbt will insert a JSON comment at the top of your query containing the information including the dbt version, profile and target names, and node ids for the resources it runs. For example: +By default, dbt will insert a comment at the top of your query containing the information including the dbt version, profile and target names, and node ids for the resources it runs. For example: ```sql /* {"app": "dbt", "dbt_version": "0.15.0rc2", "profile_name": "debug", diff --git a/website/docs/terms/data-warehouse.md b/website/docs/terms/data-warehouse.md index 8d79c0444e0..2c64fbaa7b7 100644 --- a/website/docs/terms/data-warehouse.md +++ b/website/docs/terms/data-warehouse.md @@ -71,7 +71,7 @@ Because all of your data is located in the same place, it allows for faster repo | Databricks | Databricks is a cloud-based collaborative data science, data engineering, and data analytics platform that combines the best of data warehouses and data lakes into a lakehouse architecture. | | Google BigQuery | Google BigQuery is a serverless, highly scalable data warehouse that comes with a built-in query engine. | | Amazon Redshift | Amazon Redshift is a fully-managed petabyte-scale cloud-based data warehouse designed for large scale data set storage and analysis. | -| Postgres | PostgreSQL is an advanced, enterprise class open source relational database that supports both SQL (relational) and JSON (non-relational) querying. | +| Postgres | PostgreSQL is an advanced, enterprise class open source relational database that supports both SQL (relational) and (non-relational) querying. | ## Data warehouse vs data lake diff --git a/website/docs/terms/dataframe.md b/website/docs/terms/dataframe.md index 3955d567aab..8981c8e4648 100644 --- a/website/docs/terms/dataframe.md +++ b/website/docs/terms/dataframe.md @@ -19,7 +19,7 @@ While DataFrames are also used in other languages for data processing, such as R DataFrames have a long history ([going back to 1990](https://towardsdatascience.com/preventing-the-death-of-the-dataframe-8bca1c0f83c8#:~:text=The%20earliest%20%E2%80%9Cdataframe%E2%80%9D%2C%20originally,Hastie%20in%201992%20%5B1%5D)!), but gained popularity first as a part of R and then as a part of [pandas](https://pandas.pydata.org/), an open source Python library of useful data analysis and manipulation tools. To work with DataFrames in Python, folks typically need to import the pandas library in the beginning of their script, `.py` file, or Python notebook with the conventional `import pandas as pd`. -One of the strengths of DataFrames lies in its ability to take data in its original form (ex. array, list, JSON, parquet, dictionary) and form a tabular (rows and columns) format out of it. Once this data is in a tabular format, you can apply functions and packages to that data to clean, transform, and enrich it. +One of the strengths of DataFrames lies in its ability to take data in its original form (ex. array, list, , parquet, dictionary) and form a tabular (rows and columns) format out of it. Once this data is in a tabular format, you can apply functions and packages to that data to clean, transform, and enrich it. Below is an example creation of a Python DataFrame from a list and some light enrichment on it: diff --git a/website/docs/terms/elt.md b/website/docs/terms/elt.md index a95f210a3f0..b36c0486d9e 100644 --- a/website/docs/terms/elt.md +++ b/website/docs/terms/elt.md @@ -47,7 +47,7 @@ In the final transformation step, the raw data that has been loaded into your da - Some columns are potentially the incorrect data type - Tables are not joined to other tables - Timestamps may be in the incorrect timezone for your reporting -- JSON fields may need to be unnested +- fields may need to be unnested - Tables may be missing primary keys - And more! diff --git a/website/snippets/tutorial-document-your-models.md b/website/snippets/tutorial-document-your-models.md index 58c183b2355..87df51e45a6 100644 --- a/website/snippets/tutorial-document-your-models.md +++ b/website/snippets/tutorial-document-your-models.md @@ -45,4 +45,4 @@ Adding [documentation](/docs/building-a-dbt-project/documentation) to your proje -2. Run `dbt docs generate` to generate the documentation for your project. dbt introspects your project and your warehouse to generate a json file with rich documentation about your project. +2. Run `dbt docs generate` to generate the documentation for your project. dbt introspects your project and your warehouse to generate a file with rich documentation about your project. From 768d95493550899aeb1c9e8b298150705e80950f Mon Sep 17 00:00:00 2001 From: johnblust <97988576+johnblust@users.noreply.github.com> Date: Fri, 23 Sep 2022 11:01:12 -0400 Subject: [PATCH 117/130] Update website/docs/terms/json.md Co-authored-by: Kira Furuichi --- website/docs/terms/json.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/terms/json.md b/website/docs/terms/json.md index 4d492ff8e4e..9f996b5bcbb 100644 --- a/website/docs/terms/json.md +++ b/website/docs/terms/json.md @@ -6,7 +6,7 @@ displayText: JSON hoverSnippet: JSON (JavaScript Object Notation) is a minimal format for semi-structured data used to capture relationships between fields and values. --- -JSON stands for JavaScript Object Notation. JSON is a minimal format which is great for processing data for applications. It can capture many types of relationships in a concise format. It’s a commonly used format for semi-structured data. The tables in your contain structured data (as opposed to semi-structured). For each row, each field typically contains one value. Structured data, or tabular data, is intuitive and easy to read, but semi-structured data offers more flexibility. +JSON stands for JavaScript Object Notation. JSON is a minimal format which is great for processing data for applications. It can capture many types of relationships in a concise format and is a commonly used format for semi-structured data. The tables in your contain structured data (as opposed to semi-structured) where for each row, each field typically contains one value. Structured data, or tabular data, is intuitive and easy to read, but semi-structured data offers more flexibility. Let’s talk through what that looks like in practice so we can get a better sense of what we mean. From a08d0a267836ee297195a1b7e31882133318f178 Mon Sep 17 00:00:00 2001 From: johnblust <97988576+johnblust@users.noreply.github.com> Date: Fri, 23 Sep 2022 11:01:18 -0400 Subject: [PATCH 118/130] Update website/docs/terms/json.md Co-authored-by: Kira Furuichi --- website/docs/terms/json.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/terms/json.md b/website/docs/terms/json.md index 9f996b5bcbb..8a48443be80 100644 --- a/website/docs/terms/json.md +++ b/website/docs/terms/json.md @@ -18,7 +18,7 @@ When looking at data formatted in JSON, we say that the data is stored in **JSON order = {"customer_id":2947, "order_id":4923, "order_items":"cheesecake"}` ``` -Order is the JSON object. `"customer_id":2947` is one of the key-value pairs within this JSON object. +`order` is the JSON object. `"customer_id":2947` is one of the key-value pairs within this JSON object. If I wanted to find the customer_id, I could return that value with `order[“customer_id”]` or `order.customer_id`. It’s easy for us to simply read the customer_id just by looking at the JSON object in this example, but what if your JSON object contains hundreds of key-value pairs or complex nesting? Being aware of how to pull information out of JSON is essential if you’re working with it in the wild. From a435e990dc030bae974c68133c2150f78670359c Mon Sep 17 00:00:00 2001 From: johnblust <97988576+johnblust@users.noreply.github.com> Date: Fri, 23 Sep 2022 11:01:22 -0400 Subject: [PATCH 119/130] Update website/docs/terms/json.md Co-authored-by: Kira Furuichi --- website/docs/terms/json.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/terms/json.md b/website/docs/terms/json.md index 8a48443be80..6a9c1a6ed28 100644 --- a/website/docs/terms/json.md +++ b/website/docs/terms/json.md @@ -15,7 +15,7 @@ Let’s talk through what that looks like in practice so we can get a better sen When looking at data formatted in JSON, we say that the data is stored in **JSON objects**. These are composed of key-value pairs. JSON objects are enclosed in curly brackets (`{ }`) and each key-value pair is separated by a comma. Here’s an example: ```json -order = {"customer_id":2947, "order_id":4923, "order_items":"cheesecake"}` +order = {"customer_id":2947, "order_id":4923, "order_items":"cheesecake"} ``` `order` is the JSON object. `"customer_id":2947` is one of the key-value pairs within this JSON object. From 93e6b1862e292a1b905dfb6fc468711605f9c196 Mon Sep 17 00:00:00 2001 From: johnblust <97988576+johnblust@users.noreply.github.com> Date: Fri, 23 Sep 2022 11:01:27 -0400 Subject: [PATCH 120/130] Update website/docs/terms/json.md Co-authored-by: Kira Furuichi --- website/docs/terms/json.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/terms/json.md b/website/docs/terms/json.md index 6a9c1a6ed28..49c99e0b8f2 100644 --- a/website/docs/terms/json.md +++ b/website/docs/terms/json.md @@ -8,7 +8,7 @@ hoverSnippet: JSON (JavaScript Object Notation) is a minimal format for semi-str JSON stands for JavaScript Object Notation. JSON is a minimal format which is great for processing data for applications. It can capture many types of relationships in a concise format and is a commonly used format for semi-structured data. The tables in your contain structured data (as opposed to semi-structured) where for each row, each field typically contains one value. Structured data, or tabular data, is intuitive and easy to read, but semi-structured data offers more flexibility. -Let’s talk through what that looks like in practice so we can get a better sense of what we mean. +Let’s talk through what that looks like in practice so you can get a better sense of what we mean. ## JSON syntax example From b1fa92a7981d3b16f2938f7b91b811ec4b838d19 Mon Sep 17 00:00:00 2001 From: johnblust <97988576+johnblust@users.noreply.github.com> Date: Fri, 23 Sep 2022 11:01:39 -0400 Subject: [PATCH 121/130] Update website/docs/terms/json.md Co-authored-by: Kira Furuichi --- website/docs/terms/json.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/terms/json.md b/website/docs/terms/json.md index 49c99e0b8f2..4c3f3c0ac57 100644 --- a/website/docs/terms/json.md +++ b/website/docs/terms/json.md @@ -26,7 +26,7 @@ A key feature of JSON is that it can contain data types that aren’t normally f ### Dictionaries and arrays in JSON -JSON inherits its syntax from JavaScript (JS) so dictionaries and arrays are formatted in the same way as they are in JS. Dictionaries are formatted just like JSON objects and consist of key-value pairs. Arrays are lists of values. They’re enclosed in square brackets (`[ ]`) and each value is separated by a comma, like so: +JSON inherits its syntax from JavaScript (JS) so dictionaries and arrays are formatted in the same way as they are in JS. Dictionaries are formatted just like JSON objects and consist of key-value pairs. Arrays are lists of values and they’re enclosed in square brackets (`[ ]`) and each value is separated by a comma, like so: ```json menu_items = ["cheesecake", "danish", "coffee"] From 59e9aadc7fb438a30a96eb8b40b395efef9ac2f9 Mon Sep 17 00:00:00 2001 From: johnblust <97988576+johnblust@users.noreply.github.com> Date: Fri, 23 Sep 2022 11:01:51 -0400 Subject: [PATCH 122/130] Update website/docs/terms/json.md Co-authored-by: Kira Furuichi --- website/docs/terms/json.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/terms/json.md b/website/docs/terms/json.md index 4c3f3c0ac57..650291a00e1 100644 --- a/website/docs/terms/json.md +++ b/website/docs/terms/json.md @@ -85,7 +85,7 @@ tweet[‘user’][‘id’]
        How would you call the unwound url? -Tweet[‘entities’][‘urls’][0][‘unwound’][‘url’] +`tweet['entities']['urls'][0]['unwound']['url']`
        As you can see, JSON objects can get complex pretty quickly. From 2ca8f8107b7a073c76787e997d88d27e5127cad5 Mon Sep 17 00:00:00 2001 From: johnblust <97988576+johnblust@users.noreply.github.com> Date: Fri, 23 Sep 2022 11:01:57 -0400 Subject: [PATCH 123/130] Update website/docs/terms/json.md Co-authored-by: Kira Furuichi --- website/docs/terms/json.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/terms/json.md b/website/docs/terms/json.md index 650291a00e1..4cf727bb796 100644 --- a/website/docs/terms/json.md +++ b/website/docs/terms/json.md @@ -100,4 +100,4 @@ JSON is lightweight and often used to transfer data over a network connection. A ## Conclusion -The greatest strength of JSON also acts as its weakness— the data it contains informs the shape the object takes, rather than the other way around. Structured data is the bread and butter of data, but a semi-structured format is an alternative option when a tabular format becomes too rigid to describe the relationships between different entities. \ No newline at end of file +The greatest strength of JSON also acts as its weakness—the data it contains informs the shape the object takes, rather than the other way around. Structured data is the bread and butter of analytics work, but a semi-structured format is an alternative option when a tabular format becomes too rigid to describe the relationships between different entities. \ No newline at end of file From 9ae79f7166411344a176d3b3fcaac2dffad2d2ef Mon Sep 17 00:00:00 2001 From: johnblust <97988576+johnblust@users.noreply.github.com> Date: Fri, 23 Sep 2022 11:02:02 -0400 Subject: [PATCH 124/130] Update website/docs/terms/json.md Co-authored-by: Kira Furuichi --- website/docs/terms/json.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/terms/json.md b/website/docs/terms/json.md index 4cf727bb796..21c2f10010c 100644 --- a/website/docs/terms/json.md +++ b/website/docs/terms/json.md @@ -96,7 +96,7 @@ Semi-structured data offers flexibility with the trade-off of being more complex ## Use cases for JSON -JSON is lightweight and often used to transfer data over a network connection. As we’ve seen, data from social media sites are often stored as JSON objects. JSON is also commonly how data from IoT sensors is formatted. You’ll often see JSON when using an API. +JSON is lightweight and often used to transfer data over a network connection. As we’ve seen, data from social media sites are often stored as JSON objects. JSON is also commonly how data from IoT sensors is formatted and you’ll often see JSON when using an API. ## Conclusion From f7b6c3e37400bb4b95ee6283482093a3a13ce2d0 Mon Sep 17 00:00:00 2001 From: johnblust <97988576+johnblust@users.noreply.github.com> Date: Fri, 23 Sep 2022 11:02:14 -0400 Subject: [PATCH 125/130] Update website/docs/terms/json.md Co-authored-by: Kira Furuichi --- website/docs/terms/json.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/terms/json.md b/website/docs/terms/json.md index 21c2f10010c..1201d0e4a58 100644 --- a/website/docs/terms/json.md +++ b/website/docs/terms/json.md @@ -20,7 +20,7 @@ order = {"customer_id":2947, "order_id":4923, "order_items":"cheesecake"} `order` is the JSON object. `"customer_id":2947` is one of the key-value pairs within this JSON object. -If I wanted to find the customer_id, I could return that value with `order[“customer_id”]` or `order.customer_id`. It’s easy for us to simply read the customer_id just by looking at the JSON object in this example, but what if your JSON object contains hundreds of key-value pairs or complex nesting? Being aware of how to pull information out of JSON is essential if you’re working with it in the wild. +If I wanted to find the `customer_id`, I could return that value with `order[“customer_id”]` or `order.customer_id`. It’s easy for us to simply read the `customer_id` just by looking at the JSON object in this example, but what if your JSON object contains hundreds of key-value pairs or complex nesting? Being aware of how to pull information out of JSON is essential if you’re working with it in the wild. A key feature of JSON is that it can contain data types that aren’t normally found in relational databases, namely **dictionaries** and **arrays**. Let’s break down what that means and then we’ll look at an example to pull everything together. From 9ef408c7228f4fc985a1087ab92e69475e0ecbb1 Mon Sep 17 00:00:00 2001 From: johnblust <97988576+johnblust@users.noreply.github.com> Date: Fri, 23 Sep 2022 11:02:25 -0400 Subject: [PATCH 126/130] Update website/docs/terms/json.md Co-authored-by: Kira Furuichi --- website/docs/terms/json.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/terms/json.md b/website/docs/terms/json.md index 1201d0e4a58..587d0761fa6 100644 --- a/website/docs/terms/json.md +++ b/website/docs/terms/json.md @@ -80,7 +80,7 @@ Here's a quick quiz to see if you're understanding the file's structure:
        How would you call the user ID? -tweet[‘user’][‘id’] +`tweet['user']['id']`
        From 09ddf58c60a376574c3fe78f167b76411e239d5f Mon Sep 17 00:00:00 2001 From: johnblust <97988576+johnblust@users.noreply.github.com> Date: Fri, 23 Sep 2022 12:55:33 -0400 Subject: [PATCH 127/130] Update website/docs/terms/json.md Co-authored-by: Kira Furuichi --- website/docs/terms/json.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/terms/json.md b/website/docs/terms/json.md index 587d0761fa6..ed566e9e983 100644 --- a/website/docs/terms/json.md +++ b/website/docs/terms/json.md @@ -20,7 +20,7 @@ order = {"customer_id":2947, "order_id":4923, "order_items":"cheesecake"} `order` is the JSON object. `"customer_id":2947` is one of the key-value pairs within this JSON object. -If I wanted to find the `customer_id`, I could return that value with `order[“customer_id”]` or `order.customer_id`. It’s easy for us to simply read the `customer_id` just by looking at the JSON object in this example, but what if your JSON object contains hundreds of key-value pairs or complex nesting? Being aware of how to pull information out of JSON is essential if you’re working with it in the wild. +If I wanted to find the `customer_id`, I could return that value with `order["customer_id"]` or `order.customer_id`. It’s easy for us to simply read the `customer_id` just by looking at the JSON object in this example, but what if your JSON object contains hundreds of key-value pairs or complex nesting? Being aware of how to pull information out of JSON is essential if you’re working with it in the wild. A key feature of JSON is that it can contain data types that aren’t normally found in relational databases, namely **dictionaries** and **arrays**. Let’s break down what that means and then we’ll look at an example to pull everything together. From 74265d557a7af1aad8781e6c616495b7398ef92f Mon Sep 17 00:00:00 2001 From: johnblust <97988576+johnblust@users.noreply.github.com> Date: Fri, 23 Sep 2022 12:55:50 -0400 Subject: [PATCH 128/130] Update website/docs/terms/json.md Co-authored-by: Kira Furuichi --- website/docs/terms/json.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/terms/json.md b/website/docs/terms/json.md index ed566e9e983..4ddbc46b8a3 100644 --- a/website/docs/terms/json.md +++ b/website/docs/terms/json.md @@ -80,7 +80,7 @@ Here's a quick quiz to see if you're understanding the file's structure:
        How would you call the user ID? -`tweet['user']['id']` +tweet['user']['id']
        From 07715862167059e0bee07d03f6042c7510ce1f10 Mon Sep 17 00:00:00 2001 From: johnblust <97988576+johnblust@users.noreply.github.com> Date: Fri, 23 Sep 2022 12:55:57 -0400 Subject: [PATCH 129/130] Update website/docs/terms/json.md Co-authored-by: Kira Furuichi --- website/docs/terms/json.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/terms/json.md b/website/docs/terms/json.md index 4ddbc46b8a3..652fb58cbe3 100644 --- a/website/docs/terms/json.md +++ b/website/docs/terms/json.md @@ -85,7 +85,7 @@ tweet['user']['id']
        How would you call the unwound url? -`tweet['entities']['urls'][0]['unwound']['url']` +tweet['entities']['urls'][0]['unwound']['url']
        As you can see, JSON objects can get complex pretty quickly. From 5df6bf46655775015515b29a3c15424287c911f1 Mon Sep 17 00:00:00 2001 From: Wout Date: Mon, 26 Sep 2022 13:30:18 +0200 Subject: [PATCH 130/130] fix typo in 'availabe' --- .../reference/dbt-jinja-functions/dbt-project-yml-context.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/reference/dbt-jinja-functions/dbt-project-yml-context.md b/website/docs/reference/dbt-jinja-functions/dbt-project-yml-context.md index 2050d137ce8..71d0ce67628 100644 --- a/website/docs/reference/dbt-jinja-functions/dbt-project-yml-context.md +++ b/website/docs/reference/dbt-jinja-functions/dbt-project-yml-context.md @@ -17,7 +17,7 @@ and `snapshots:` keys in the `dbt_project.yml` file. **Available context variables:** - [target](target) - [env_var](env_var) -- [vars](var) (_Note: only variables defined with `--vars` are availabe_) +- [vars](var) (_Note: only variables defined with `--vars` are available_) - [builtins](builtins) - [dbt_version](dbt_version)