diff --git a/website/docs/docs/collaborate/column-level-lineage.md b/website/docs/docs/collaborate/column-level-lineage.md index ea340aeb728..42f27cda970 100644 --- a/website/docs/docs/collaborate/column-level-lineage.md +++ b/website/docs/docs/collaborate/column-level-lineage.md @@ -41,6 +41,10 @@ When exploring your data products, navigating column lineage allows analytics en ## Caveats +Following are the CLL caveats/limitations. + +### SQL parsing + Column-level lineage relies on SQL parsing. Errors can occur when parsing fails or a column's origin is unknown (like with JSON unpacking, lateral joins, and so on). In these cases, lineage may be incomplete and dbt Cloud will provide a warning about it in the column lineage. @@ -54,3 +58,17 @@ Possible error cases are: - **Parsing error** — Error occurs when the SQL is ambiguous or too complex for parsing. An example of ambiguous parsing scenarios are _complex_ lateral joins. - **Python error** — Error occurs when a Python model is used within the lineage. Due to the nature of Python models, it's not possible to parse and determine the lineage. - **Unknown error** — Error occurs when the lineage can't be determined for an unknown reason. An example of this would be if a dbt best practice is not being followed, like using hardcoded table names instead of `ref` statements. + +### Data platform support + +CLL in dbt Cloud works with the following data platforms: +- Snowflake +- BigQuery +- Redshift +- Databricks (Unity Catalog) + +The following adapters aren't currently supported by CLL in dbt Cloud. More of these platforms will be supported in the future. +- Hive metastore version of Databricks +- Apache Spark +- Starburst/Trino +- Microsoft Fabric \ No newline at end of file diff --git a/website/docs/docs/core/connect-data-platform/mindsdb-setup.md b/website/docs/docs/core/connect-data-platform/mindsdb-setup.md index 47d9d311ff9..f9ea9b7ba3d 100644 --- a/website/docs/docs/core/connect-data-platform/mindsdb-setup.md +++ b/website/docs/docs/core/connect-data-platform/mindsdb-setup.md @@ -19,6 +19,8 @@ meta: The dbt-mindsdb package allows dbt to connect to [MindsDB](https://github.com/mindsdb/mindsdb). +::: + import SetUpPages from '/snippets/_setup-pages-intro.md'; diff --git a/website/docs/docs/introduction.md b/website/docs/docs/introduction.md index f4fb6e64d53..d94a65533f3 100644 --- a/website/docs/docs/introduction.md +++ b/website/docs/docs/introduction.md @@ -60,7 +60,7 @@ As a dbt user, your main focus will be on writing models (i.e. select queries) t | Load seed files| Often in analytics, raw values need to be mapped to a more readable value (for example, converting a country-code to a country name) or enriched with static or infrequently changing data. These data sources, known as seed files, can be saved as a CSV file in your `project` and loaded into your data warehouse using the `seed` command. Read more about [Seeds](/docs/build/seeds).| | Snapshot data | Often, records in a data source are mutable, in that they change over time. This can be difficult to handle in analytics if you want to reconstruct historic values. dbt provides a mechanism to snapshot raw data for a point in time, through use of [snapshots](/docs/build/snapshots).| -### Related docs +## Related docs - [Quickstarts for dbt](/guides) - [Best practice guides](/best-practices) diff --git a/website/docs/reference/artifacts/dbt-artifacts.md b/website/docs/reference/artifacts/dbt-artifacts.md index 31525777500..58074c8b426 100644 --- a/website/docs/reference/artifacts/dbt-artifacts.md +++ b/website/docs/reference/artifacts/dbt-artifacts.md @@ -19,15 +19,19 @@ They could also be used to: dbt has produced artifacts since the release of dbt-docs in v0.11.0. Starting in dbt v0.19.0, we are committing to a stable and sustainable way of versioning, documenting, and validating dbt artifacts. -## When are artifacts produced? +### When are artifacts produced? Most dbt commands (and corresponding RPC methods) produce artifacts: -- [semantic manifest](/docs/dbt-cloud-apis/sl-manifest): Lives in the `/target` directory of your dbt project and stores various artifacts (such as compiled models and tests) generated during the execution of your project. +- [semantic manifest](/docs/dbt-cloud-apis/sl-manifest): produced whenever your dbt project is parsed - [manifest](/reference/artifacts/manifest-json): produced by commands that read and understand your project - [run results](/reference/artifacts/run-results-json): produced by commands that run, compile, or catalog nodes in your DAG - [catalog](catalog-json): produced by `docs generate` - [sources](/reference/artifacts/sources-json): produced by `source freshness` +## Where are artifacts produced? + +By default, artifacts are written to the `/target` directory of your dbt project. You can configure the location using the [`target-path`](/reference/project-configs/target-path#configuration). + ## Common metadata All artifacts produced by dbt include a `metadata` dictionary with these properties: diff --git a/website/src/components/expandable/index.js b/website/src/components/expandable/index.js new file mode 100644 index 00000000000..eb1dc966ad1 --- /dev/null +++ b/website/src/components/expandable/index.js @@ -0,0 +1,51 @@ +/* eslint-disable */ + +import React, { useState } from 'react'; +import styles from './styles.module.css'; + +function slugify(text) { + return text.toString().toLowerCase() + .normalize('NFD') // Normalize to NFD Unicode form + .replace(/[\u0300-\u036f]/g, '') // Remove diacritics + .replace(/\s+/g, '-') // Replace spaces with - + .replace(/[^\w\-]+/g, '') // Remove all non-word chars + .replace(/\-\-+/g, '-') // Replace multiple - with single - + .replace(/^-+/, '') // Trim - from start + .replace(/-+$/, ''); // Trim - from end +} + +function expandable({ children, alt_header = null }) { + if(!alt_header) { return null; } + const [isOn, setOn] = useState(false); + // generate a slug from the alt_header + const anchorId = slugify(alt_header); + + const handleToggleClick = (event) => { + event.preventDefault(); + setOn(current => !current); + }; + + return ( +
+ + +   + {alt_header} + +
+ {children} +
+
+ ); +} + +export default expandable; diff --git a/website/src/components/expandable/styles.module.css b/website/src/components/expandable/styles.module.css new file mode 100644 index 00000000000..dd6c94770d1 --- /dev/null +++ b/website/src/components/expandable/styles.module.css @@ -0,0 +1,86 @@ +:local(.link) :local(.headerText) { + content: ''; + color: black; /* Black text in normal mode */ + text-decoration: none; + transition: text-decoration 0.3s; /* Smooth transition */ + font-weight: 600; + margin-bottom: 20px; +} + +:local(.link:hover) :local(.headerText), +:local(.link:focus) :local(.headerText) { + text-decoration: underline; + cursor: pointer; +} + +:local(.toggle)::before { + content: ''; + display: inline-block; + border: solid black; /* Arrow color */ + border-width: 0 2px 2px 0; /* Adjust for 'boldness' */ + padding: 3px; /* Adjust size */ + transform: rotate(45deg); /* Initial right-pointing arrow */ + transition: transform 0.3s; /* Smooth transition for toggle icon */ + margin-right: 8px; +} + +:local(.toggleDown)::before { + transform: rotate(225deg); /* Downward arrow */ +} + +:local(.toggleRight)::before { + transform: rotate(315deg); /* Right-pointing arrow */ +} + +:local(.toggle)::before { + border-color: rgb(253, 153, 83); /* Orange arrow color in light mode */ +} + +/* Adjusting for Light and Dark Modes */ +:local(html[data-theme='dark'] .link), :local(html[data-theme='dark'] .headerText) { + color: white; /* White text in dark mode */ +} + +:local(html[data-theme='dark'] .toggle)::before { + border-color: white; /* White arrow in dark mode */ + border-color: rgb(253, 153, 83); +} + +.expandableContainer :local(.body) { + margin-top: 10px; + margin-left: .5em; + padding: 10px; + background-color: transparent; +} + +:local(html[data-theme='dark'] .link), +:local(html[data-theme='dark'] .headerText) { + color: white; /* White text in dark mode */ +} + +:local(.body > p:last-child) { + margin-bottom: 0px; + +} + +:local(.link)::after { + content: ""; + display: inline-block; + width: 12px; + height: 12px; + background-image: url('/img/copy.png'); + background-size: contain; + background-repeat: no-repeat; + opacity: 0; /* Start with icon hidden */ + transition: opacity 0.3s ease-in-out; + margin-left: 8px; + } + + :local(.link:not(.toggleOpen)):hover::after { + opacity: 1; /* Only show icon on hover when toggle is not open */ + } + +.expandableContainer { + margin-bottom: 10px; /* Adjust this value as needed to create space */ + } + \ No newline at end of file diff --git a/website/src/theme/MDXComponents/index.js b/website/src/theme/MDXComponents/index.js index 2a412e198f1..345145c780f 100644 --- a/website/src/theme/MDXComponents/index.js +++ b/website/src/theme/MDXComponents/index.js @@ -44,6 +44,7 @@ import dbtEditor from '@site/src/components/dbt-editor'; import Icon from '@site/src/components/icon'; import Lifecycle from '@site/src/components/lifeCycle'; import detailsToggle from '@site/src/components/detailsToggle'; +import expandable from '@site/src/components/expandable'; const MDXComponents = { head: MDXHead, @@ -94,5 +95,6 @@ const MDXComponents = { Icon: Icon, Lifecycle: Lifecycle, detailsToggle: detailsToggle, + expandable: expandable, }; export default MDXComponents; diff --git a/website/static/js/headerLinkCopy.js b/website/static/js/headerLinkCopy.js index a41f4f4e7ce..0d4b06e6ca3 100644 --- a/website/static/js/headerLinkCopy.js +++ b/website/static/js/headerLinkCopy.js @@ -8,7 +8,7 @@ // separating function from eventlistener to understand they are two separate things function copyHeader () { - const headers = document.querySelectorAll("h2.anchor, h3.anchor"); + const headers = document.querySelectorAll("h2.anchor, h3.anchor, .expandable-anchor.anchor"); headers.forEach((header) => { header.style.cursor = "pointer";