Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
d9a7194
fix(cubesql): More readable error message during SQL generation
paveltiunov Feb 23, 2024
60aad90
feat(cubesql): Support placeholders in `OFFSET`, `FETCH ...`
MazterQyou Feb 23, 2024
98b5709
feat(cubesql): `WHERE` SQL push down (#7808)
paveltiunov Feb 24, 2024
d7449a6
chore: Help wanted message
paveltiunov Feb 24, 2024
abc95e2
fix(cubesql): writerOrChannel.resolve is not a function
paveltiunov Feb 24, 2024
754a0df
fix(cubesql): Timestamp equals filter support
paveltiunov Feb 25, 2024
b122837
fix(cubesql): `ungrouped` query can be routed to Cube Store (#7810)
paveltiunov Feb 25, 2024
97fa757
feat(cubesql): Allow replacement of aggregation functions in SQL push…
paveltiunov Feb 25, 2024
b79f697
fix(cubesql): Can't find rewrite due to AST node limit reached for re…
paveltiunov Feb 26, 2024
f8bf572
chore(cubesql): Fix unit tests
paveltiunov Feb 26, 2024
77cc883
feat(duckdb-driver): Add support for local fs duckdb database path (#…
JichaoS Feb 26, 2024
7b797bf
v0.34.57
paveltiunov Feb 26, 2024
ef2ab5f
docs: Update semantic-layer-sync.mdx typo (#7809)
morgan-at-cube Feb 26, 2024
b3ef7b4
docs: fix typo (#7815)
zacharywelch Feb 26, 2024
db37fc3
fix(clickhouse-driver): Correct support for Enum8/16 (#7814)
ovr Feb 26, 2024
917004e
feat(materialize-driver): Add cluster option to Materialize driver (#…
bobbyiliev Feb 27, 2024
cb2376c
fix(cubesql): Continue wait error is being thrown to users
paveltiunov Feb 27, 2024
5051f66
fix(cubesql): Ambiguous reference in case of same two 16 char prefixe…
paveltiunov Feb 27, 2024
d9ef53a
v0.34.58
paveltiunov Feb 27, 2024
13ca394
docs: Cloud provider services (#7834)
igorlukanin Feb 27, 2024
fa2a89b
fix(cubesql): Replace only simple ungrouped measures in projections t…
paveltiunov Feb 28, 2024
8c37a40
fix: Ungrouped filtered count should contain `CASE WHEN` statement bu…
paveltiunov Feb 28, 2024
922699c
v0.34.59
paveltiunov Feb 28, 2024
8e2a3ec
feat(cubesql): In subquery support (#7851)
waralexrom Feb 28, 2024
8992df4
chore: deprecate cubejsApi in favor of cubeApi
vasilev-alex Feb 29, 2024
33a51f2
docs: Add Power BI, extract pages in Semantic Layer Sync (#7856)
igorlukanin Feb 29, 2024
76038a2
chore(cubesql): Add tests for SUM(1)
paveltiunov Feb 29, 2024
16e2ee0
feat(cubesql): Support split and SUM(1)
paveltiunov Mar 1, 2024
696c035
docs: Elaborate on partition selection for lambda pre-aggregations
paveltiunov Mar 1, 2024
f970937
fix(cubesql): Incorrect CASE WHEN generated during ungrouped filtered…
paveltiunov Mar 1, 2024
d2c5159
docs: Detail PAT expiration in Tableau
igorlukanin Mar 1, 2024
de9ef08
fix(cubesql): Allow different `Timestamp` types in `DATEDIFF`
MazterQyou Mar 1, 2024
00a6ec0
fix: Bump max connect retries for Cube Store
paveltiunov Mar 1, 2024
b97268f
fix(cubesql): Remove excessive limit on inner wrapped queries (#7864)
paveltiunov Mar 2, 2024
82217b2
fix(client-core): incorrect index in movePivotItem (#6684) Thanks to …
telunc Mar 2, 2024
addde0d
fix(cubesql): Prioritize ungrouped aggregate scans over ungrouped pro…
paveltiunov Mar 2, 2024
7434929
v0.34.60
paveltiunov Mar 2, 2024
c02a07f
fix(cubesql): Partition pruning doesn't work when view uses proxy mem…
paveltiunov Mar 3, 2024
2540a22
fix: Wrong sql generation when multiple primary keys used (#6689) Tha…
alexanderlz Mar 4, 2024
3131f94
fix(cubesql): Trim ".0" postfix when converting `Float to `Utf8`
MazterQyou Mar 4, 2024
34ede6a
chore: Extended building pre-aggregation log, export bucket support f…
RusovDmitriy Mar 5, 2024
db7e2c1
feat(clickhouse-driver): Support export bucket for S3 (write only) (#…
ovr Mar 6, 2024
1a0a324
fix(cubesql): Error out when temporary table already exists
MazterQyou Feb 29, 2024
38da93b
chore(cubesql): Introduce temp table memory limits
MazterQyou Feb 29, 2024
cd67a7c
chore(cubesql): Remove introspection subquery hacks
MazterQyou Mar 7, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions .github/label-actions.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
"help wanted":
comment: |
If you are interested in working on this issue, please leave a comment below and we will be happy to assign the issue to you.
If this is the first time you are contributing a Pull Request to Cube.js, please check our [contribution guidelines](https://github.com/cube-js/cube/blob/master/CONTRIBUTING.md).
You can also post any questions while contributing in the #contributors channel in the [Cube.js Slack](https://slack.cube.dev/).
If you are interested in working on this issue, please provide go ahead and provide PR for that.
We'd be happy to review it and merge it.
If this is the first time you are contributing a Pull Request to Cube, please check our [contribution guidelines](https://github.com/cube-js/cube/blob/master/CONTRIBUTING.md).
You can also post any questions while contributing in the #contributors channel in the [Cube Slack](https://slack.cube.dev/).
77 changes: 77 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,83 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.

## [0.34.60](https://github.com/cube-js/cube/compare/v0.34.59...v0.34.60) (2024-03-02)


### Bug Fixes

* Bump max connect retries for Cube Store ([00a6ec0](https://github.com/cube-js/cube/commit/00a6ec034c2d5dff8c66647b7ec6cae39c0237ba))
* **client-core:** incorrect index in movePivotItem ([#6684](https://github.com/cube-js/cube/issues/6684)) Thanks to [@telunc](https://github.com/telunc)! ([82217b2](https://github.com/cube-js/cube/commit/82217b28a012158cd8a978fd2e1ad15746ddeae0))
* **cubesql:** Allow different `Timestamp` types in `DATEDIFF` ([de9ef08](https://github.com/cube-js/cube/commit/de9ef081cae21f551a38219bb64749e08e7ca6fc))
* **cubesql:** Incorrect CASE WHEN generated during ungrouped filtered count ([#7859](https://github.com/cube-js/cube/issues/7859)) ([f970937](https://github.com/cube-js/cube/commit/f9709376e5dadfbcbffe9a65dfa9f0ea16df7bab)), closes [#7858](https://github.com/cube-js/cube/issues/7858)
* **cubesql:** Prioritize ungrouped aggregate scans over ungrouped projection scans so most of the members can be pushed down without wrapping ([#7865](https://github.com/cube-js/cube/issues/7865)) ([addde0d](https://github.com/cube-js/cube/commit/addde0d373f01e69485b8a0333850917ffad9a2d))
* **cubesql:** Remove excessive limit on inner wrapped queries ([#7864](https://github.com/cube-js/cube/issues/7864)) ([b97268f](https://github.com/cube-js/cube/commit/b97268fe5caf55c5b7806c597b9f7b75410f6ba4))


### Features

* **cubesql:** In subquery support ([#7851](https://github.com/cube-js/cube/issues/7851)) ([8e2a3ec](https://github.com/cube-js/cube/commit/8e2a3ecc348c4ab9e6a5ab038c46fcf7f4c3dfcc))
* **cubesql:** Support split and SUM(1) ([16e2ee0](https://github.com/cube-js/cube/commit/16e2ee0d290c502f796891e137556aad2275e52d))





## [0.34.59](https://github.com/cube-js/cube/compare/v0.34.58...v0.34.59) (2024-02-28)


### Bug Fixes

* **cubesql:** Replace only simple ungrouped measures in projections to avoid aggregate over aggregate statements ([#7852](https://github.com/cube-js/cube/issues/7852)) ([fa2a89b](https://github.com/cube-js/cube/commit/fa2a89b89f91c8eba175130fca33975200690288))
* Ungrouped filtered count should contain `CASE WHEN` statement bu… ([#7853](https://github.com/cube-js/cube/issues/7853)) ([8c37a40](https://github.com/cube-js/cube/commit/8c37a407b9d8c8f97dab51c9e0e97067c91ff90e))





## [0.34.58](https://github.com/cube-js/cube/compare/v0.34.57...v0.34.58) (2024-02-27)


### Bug Fixes

* **clickhouse-driver:** Correct support for Enum8/16 ([#7814](https://github.com/cube-js/cube/issues/7814)) ([db37fc3](https://github.com/cube-js/cube/commit/db37fc3b0f24511bd9ae3a319b5755c102bb3358))
* **cubesql:** Ambiguous reference in case of same two 16 char prefixes are in query ([5051f66](https://github.com/cube-js/cube/commit/5051f663b4142735ee1cc455936300f765de62a7))
* **cubesql:** Continue wait error is being thrown to users ([cb2376c](https://github.com/cube-js/cube/commit/cb2376c1d2cc0a86aa329072fb2ec02ddadfeaf8))


### Features

* **materialize-driver:** Add cluster option to Materialize driver ([#7773](https://github.com/cube-js/cube/issues/7773)) Thanks [@bobbyiliev](https://github.com/bobbyiliev)! ([917004e](https://github.com/cube-js/cube/commit/917004ebccfeb6509a08e5b9b51e1ae8542cf0af))





## [0.34.57](https://github.com/cube-js/cube/compare/v0.34.56...v0.34.57) (2024-02-26)


### Bug Fixes

* **cubesql:** `ungrouped` query can be routed to Cube Store ([#7810](https://github.com/cube-js/cube/issues/7810)) ([b122837](https://github.com/cube-js/cube/commit/b122837de9cd4fcaca4ddc0e7f85ff695de09483))
* **cubesql:** Can't find rewrite due to AST node limit reached for remaining non-equivalent date and timestamp constant folding rules ([b79f697](https://github.com/cube-js/cube/commit/b79f69739e2b8cb74cfc86db72fa7157dd723960))
* **cubesql:** More readable error message during SQL generation ([d9a7194](https://github.com/cube-js/cube/commit/d9a719479d6ca00ef5b2b511677cd777ceb131e7))
* **cubesql:** Support `Z` postfix in `Timestamp` response transformation ([c013c91](https://github.com/cube-js/cube/commit/c013c913bbeb8dabacc508240ab94956f1172a8b))
* **cubesql:** Timestamp equals filter support ([754a0df](https://github.com/cube-js/cube/commit/754a0df3a20cae5269e961649a01fb5047906645))
* **cubesql:** writerOrChannel.resolve is not a function ([abc95e2](https://github.com/cube-js/cube/commit/abc95e259c82894aea63371e468c98d640b4d42e))


### Features

* **cubesql:** `WHERE` SQL push down ([#7808](https://github.com/cube-js/cube/issues/7808)) ([98b5709](https://github.com/cube-js/cube/commit/98b570946905586f16a502f83b0a1cf8e4aa92a6))
* **cubesql:** Allow replacement of aggregation functions in SQL push down ([#7811](https://github.com/cube-js/cube/issues/7811)) ([97fa757](https://github.com/cube-js/cube/commit/97fa757a0d22e6d7d9432d686005765b28271f7c))
* **cubesql:** Support placeholders in `OFFSET`, `FETCH ...` ([60aad90](https://github.com/cube-js/cube/commit/60aad90a237800f4471bb4efa10ec590b50e19fe))
* **cubesql:** Support temporary tables ([7022611](https://github.com/cube-js/cube/commit/702261156fc3748fc7d3103f28bd4f4648fd4e0b))
* **duckdb-driver:** Add support for local fs duckdb database path ([#7799](https://github.com/cube-js/cube/issues/7799)) ([77cc883](https://github.com/cube-js/cube/commit/77cc883a3d73d37730a82ecf9128b8929abb2ca3))





## [0.34.56](https://github.com/cube-js/cube/compare/v0.34.55...v0.34.56) (2024-02-20)


Expand Down
5 changes: 5 additions & 0 deletions docs/pages/product/caching/lambda-pre-aggregations.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,11 @@ data comes from a [streaming pre-aggregation][streaming-pre-agg].
You can use lambda pre-aggregations to combine data from multiple
pre-aggregations, where one pre-aggregation can have batch data and another
streaming.
Please note that build ranges of all rollups referenced by lambda rollup should have enough intersection between each other that anticipates partition build times for those rollups.
Cube will maximize the coverage of the requested date range by partitions from different rollups.
The first rollup in a list of referenced rollups that has a fully built partition for a particular date range will be used to serve this date range.
The last rollup in a list will be used to cover the remaining uncovered part of a date range.
Partitions of the last rollup will be used even if not completely built.

<CodeTabs>

Expand Down
1 change: 0 additions & 1 deletion docs/pages/product/configuration/_meta.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
module.exports = {
"data-sources": "Data sources",
"visualization-tools": "Visualization tools",
"vpc": "VPC",
"advanced": "Advanced"
}
1 change: 1 addition & 0 deletions docs/pages/product/configuration/data-sources/duckdb.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ deployment][ref-demo-deployment] in Cube Cloud.
| `CUBEJS_DB_DUCKDB_MEMORY_LIMIT` | The maximum memory limit for DuckDB. Equivalent to `SET memory_limit=<MEMORY_LIMIT>`. Default is 75% of available RAM | A valid memory limit | ❌ | ✅ |
| `CUBEJS_DB_DUCKDB_SCHEMA` | The [default search schema][link-duckdb-configuration-ref] | A valid schema name | ❌ | ✅ |
| `CUBEJS_DB_DUCKDB_MOTHERDUCK_TOKEN` | The service token to use for connections to MotherDuck | A valid [MotherDuck service token][motherduck-docs-svc-token] | ❌ | ✅ |
| `CUBEJS_DB_DUCKDB_DATABASE_PATH` | The database filepath to use for connection to a local database. | A valid duckdb database file path | ❌ | ✅ |
| `CUBEJS_DB_DUCKDB_S3_ACCESS_KEY_ID` | The Access Key ID to use for database connections | A valid Access Key ID | ❌ | ✅ |
| `CUBEJS_DB_DUCKDB_S3_SECRET_ACCESS_KEY` | The Secret Access Key to use for database connections | A valid Secret Access Key | ❌ | ✅ |
| `CUBEJS_DB_DUCKDB_S3_ENDPOINT` | The S3 endpoint | A valid [S3 endpoint][duckdb-docs-s3-import] | ✅ | ✅ |
Expand Down
20 changes: 11 additions & 9 deletions docs/pages/product/configuration/data-sources/materialize.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -29,19 +29,21 @@ CUBEJS_DB_PORT=6875
CUBEJS_DB_NAME=materialize
CUBEJS_DB_USER=materialize
CUBEJS_DB_PASS=materialize
CUBEJS_DB_MATERIALIZE_CLUSTER=quickstart
```

## Environment Variables

| Environment Variable | Description | Possible Values | Required |
| -------------------- | ----------------------------------------------------------------------------------- | ------------------------- | :------: |
| `CUBEJS_DB_HOST` | The host URL for a database | A valid database host URL | ✅ |
| `CUBEJS_DB_PORT` | The port for the database connection | A valid port number | ✅ |
| `CUBEJS_DB_NAME` | The name of the database to connect to | A valid database name | ✅ |
| `CUBEJS_DB_USER` | The username used to connect to the database | A valid database username | ✅ |
| `CUBEJS_DB_PASS` | The password used to connect to the database | A valid database password | ✅ |
| `CUBEJS_CONCURRENCY` | The number of concurrent connections each queue has to the database. Default is `2` | A valid number | ❌ |
| `CUBEJS_DB_MAX_POOL` | The maximum number of concurrent database connections to pool. Default is `8` | A valid number | ❌ |
| Environment Variable | Description | Possible Values | Required |
| -------------------------------- | ----------------------------------------------------------------------------------- | ------------------------- | :------: |
| `CUBEJS_DB_HOST` | The host URL for a database | A valid database host URL | ✅ |
| `CUBEJS_DB_PORT` | The port for the database connection | A valid port number | ✅ |
| `CUBEJS_DB_NAME` | The name of the database to connect to | A valid database name | ✅ |
| `CUBEJS_DB_USER` | The username used to connect to the database | A valid database username | ✅ |
| `CUBEJS_DB_PASS` | The password used to connect to the database | A valid database password | ✅ |
| `CUBEJS_CONCURRENCY` | The number of concurrent connections each queue has to the database. Default is `2` | A valid number | ❌ |
| `CUBEJS_DB_MAX_POOL` | The maximum number of concurrent database connections to pool. Default is `8` | A valid number | ❌ |
| `CUBEJS_DB_MATERIALIZE_CLUSTER` | The name of the Materialize cluster to connect to | A valid cluster name | ❌ |

## SSL

Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,15 @@
# Metabase

<InfoBox heading="Introducing Cube's Semantic Layer Sync with Preset">

Gain instant insights from your data. Join [our webinar on August 30 at 9:00am
PST](https://cube.dev/events/cube-metabase-webinar) to explore how Cube & Metabase streamline data analysis, leveraging Cube's
Semantic Layer Sync.

</InfoBox>

[Metabase][metabase-oss] is an open-source way to help everyone in your company
to ask questions and learn from data. There's also a fully-managed [cloud
service][metabase] for Metabase.

<InfoBox>

Webinar recording: [Instant Insights Unlocked with Cube & Metabase](https://cube.dev/events/cube-metabase-webinar)

</InfoBox>

## Semantic Layer Sync

It is recommended to use [Semantic Layer Sync][ref-sls] to connect Cube to
Expand Down
19 changes: 14 additions & 5 deletions docs/pages/product/configuration/visualization-tools/powerbi.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,20 @@ redirect_from:
- /config/downstream/powerbi
---

# PowerBI
# Power BI

You can connect to Cube from Power BI, interactive data visualization software
product developed by Microsoft, using the [Cube SQL API][ref-sql-api].
[Power BI](https://www.microsoft.com/en-gb/power-platform/products/power-bi/)
is an interactive data visualization software product developed by Microsoft.

## Enable Cube SQL API
## Semantic Layer Sync

It is recommended to use [Semantic Layer Sync][ref-sls] to connect Cube to
Power BI. It automatically synchronizes the [data model][ref-data-model] between
Cube and Power BI.

## SQL API

You can also use the [SQL API][ref-sql-api] to connect Cube to Tableau.

### Cube Cloud

Expand Down Expand Up @@ -50,5 +58,6 @@ are columns.
[ref-getting-started]: /product/getting-started/cloud
[ref-sql-api]: /product/apis-integrations/sql-api
[ref-pre-aggs]: /product/caching/using-pre-aggregations

[ref-sls]: /product/workspace/semantic-layer-sync
[ref-data-model]: /product/data-modeling/overview
[link-powerbi-directquery]: https://learn.microsoft.com/en-us/power-bi/connect-data/desktop-use-directquery
16 changes: 12 additions & 4 deletions docs/pages/product/configuration/visualization-tools/tableau.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,17 @@ redirect_from:

# Tableau

You can connect to Cube from Tableau, a visual analytics platform, using the
[Cube SQL API][ref-sql-api].
[Tableau](https://www.tableau.com) is a popular visual analytics platform.

## Enable Cube SQL API
## Semantic Layer Sync

It is recommended to use [Semantic Layer Sync][ref-sls] to connect Cube to
Tableau. It automatically synchronizes the [data model][ref-data-model] between
Cube and Tableau.

## SQL API

You can also use the [SQL API][ref-sql-api] to connect Cube to Tableau.

### Cube Cloud

Expand Down Expand Up @@ -62,5 +69,6 @@ are columns.
[ref-getting-started]: /product/getting-started/cloud
[ref-sql-api]: /product/apis-integrations/sql-api
[ref-pre-aggs]: /product/caching/using-pre-aggregations

[ref-sls]: /product/workspace/semantic-layer-sync
[ref-data-model]: /product/data-modeling/overview
[link-tableau-extracts]: https://help.tableau.com/current/pro/desktop/en-us/extracting_data.htm
5 changes: 4 additions & 1 deletion docs/pages/product/deployment/cloud.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ In Cube Cloud, you can:
* [Create an account](https://cubecloud.dev/auth/signup).
* Invite one or more users to the account, [assign roles][ref-rbac] to them,
and enable [single sign-on][ref-sso].
* Use a supported [cloud provider][ref-providers] and, optionally, connect with a [dedicated VPC][ref-vpc].
* Create one or more [deployments][ref-deployments] of [various
types][ref-deployment-types], and set up [continuous deployment][ref-cd].
* Within each deployment, allocate resources, run Cube, and use a set of
Expand Down Expand Up @@ -56,4 +57,6 @@ and fine-tune deployments for better [scalability][ref-scalability].
[ref-auto-sus]: /product/deployment/cloud/auto-suspension
[ref-budgets]: /product/workspace/budgets
[ref-performance]: /product/workspace/performance
[ref-scalability]: /product/deployment/cloud/scalability
[ref-scalability]: /product/deployment/cloud/scalability
[ref-providers]: /product/deployment/cloud/providers
[ref-vpc]: /product/deployment/cloud/vpc
2 changes: 2 additions & 0 deletions docs/pages/product/deployment/cloud/_meta.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
module.exports = {
"providers": "Cloud providers",
"vpc": "VPC",
"deployments": "Deployments",
"deployment-types": "Deployment types",
"continuous-deployment": "Continuous deployment",
Expand Down
47 changes: 47 additions & 0 deletions docs/pages/product/deployment/cloud/providers.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# Cloud providers in Cube Cloud

Cube Cloud works with all three major cloud providers:

- [Amazon Web Services](https://aws.amazon.com) (AWS)
- [Google Cloud Platform](https://cloud.google.com) (GCP)
- [Microsoft Azure](https://azure.microsoft.com)

<SuccessBox>

AWS and GCP are available in Cube Cloud on [all tiers](https://cube.dev/pricing).
Azure is only available on [Enterprise and above](https://cube.dev/pricing) tiers.
[Contact us](https://cube.dev/contact) for details.

</SuccessBox>

## Regions

You can create [deployments][ref-deployments] in any available shared region of any provider.

You can also use a [dedicated VPC][ref-vpc] in a region of your choice.

## Services

See provider-specific pages for a list of services Cube Cloud integrates with.

<Grid imageSize={[56, 56]} cols={2}>
<GridItem
url="providers/aws"
imageUrl="https://static.cube.dev/icons/aws.svg"
title="Amazon Web Services"
/>
<GridItem
url="providers/gcp"
imageUrl="https://static.cube.dev/icons/google-cloud.svg"
title="Google Cloud Platform"
/>
<GridItem
url="providers/azure"
imageUrl="https://static.cube.dev/icons/azure.svg"
title="Microsoft Azure"
/>
</Grid>


[ref-deployments]: /product/deployment/cloud/deployments
[ref-vpc]: /product/deployment/cloud/vpc
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
module.exports = {
"aws": "AWS",
"azure": "Azure",
"gcp": "GCP"
"gcp": "GCP",
"azure": "Azure"
}
Loading