From 0576c0956666165b1e3c21c5508ac51c70f03961 Mon Sep 17 00:00:00 2001 From: Jovan Popovic Date: Tue, 25 May 2021 11:57:36 +0200 Subject: [PATCH] Added Delta Lake samples --- .../Jupiter/_content/quickstarts/csv.ipynb | 145 -- .../Jupiter/_content/quickstarts/json.ipynb | 158 -- .../_content/quickstarts/parquet.ipynb | 169 -- .../Jupiter/_content/quickstarts/readme.md | 8 - Notebooks/TSQL/Jupiter/_content/readme.md | 26 - .../_content/tutorials/covid-ecdc.ipynb | 257 --- .../Jupiter/_content/tutorials/ny-taxi.ipynb | 270 --- .../TSQL/Jupiter/_content/tutorials/readme.md | 8 - Notebooks/TSQL/Jupiter/_data/toc.yml | 13 + .../content/quickstarts/delta-lake.ipynb | 1852 +++++++++++++++++ .../img/covid-delta-lake-studio.png | Bin 0 -> 91336 bytes .../Jupiter/content/quickstarts/readme.md | 1 + Notebooks/TSQL/Jupiter/content/readme.md | 4 +- 13 files changed, 1868 insertions(+), 1043 deletions(-) delete mode 100644 Notebooks/TSQL/Jupiter/_content/quickstarts/csv.ipynb delete mode 100644 Notebooks/TSQL/Jupiter/_content/quickstarts/json.ipynb delete mode 100644 Notebooks/TSQL/Jupiter/_content/quickstarts/parquet.ipynb delete mode 100644 Notebooks/TSQL/Jupiter/_content/quickstarts/readme.md delete mode 100644 Notebooks/TSQL/Jupiter/_content/readme.md delete mode 100644 Notebooks/TSQL/Jupiter/_content/tutorials/covid-ecdc.ipynb delete mode 100644 Notebooks/TSQL/Jupiter/_content/tutorials/ny-taxi.ipynb delete mode 100644 Notebooks/TSQL/Jupiter/_content/tutorials/readme.md create mode 100644 Notebooks/TSQL/Jupiter/content/quickstarts/delta-lake.ipynb create mode 100644 Notebooks/TSQL/Jupiter/content/quickstarts/img/covid-delta-lake-studio.png diff --git a/Notebooks/TSQL/Jupiter/_content/quickstarts/csv.ipynb b/Notebooks/TSQL/Jupiter/_content/quickstarts/csv.ipynb deleted file mode 100644 index 27085b1..0000000 --- a/Notebooks/TSQL/Jupiter/_content/quickstarts/csv.ipynb +++ /dev/null @@ -1,145 +0,0 @@ -{ - "metadata": { - "kernelspec": { - "name": "SQL", - "display_name": "SQL", - "language": "sql" - }, - "language_info": { - "name": "sql", - "version": "" - } - }, - "nbformat_minor": 2, - "nbformat": 4, - "cells": [ - { - "cell_type": "markdown", - "source": [ - "# Query CSV files\n", - "\n", - "Serverless Synapse SQL pool enables you to read CSV files from Azure storage (DataLake or blob storage).\n", - "\n", - "## Read csv file\n", - "\n", - "The easiest way to see to the content of your `CSV` file is to provide file URL to `OPENROWSET` function and specify format `CSV`. If the file is publicly available or if your Azure AD identity can access this file, you should be able to see the content of the file using the query like the one shown in the following example:" - ], - "metadata": { - "azdata_cell_guid": "e01663cc-427c-457f-84db-b16d0fca3a90" - } - }, - { - "cell_type": "code", - "source": [ - "select top 10 *\r\n", - "from openrowset(\r\n", - " bulk 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/ecdc_cases/latest/ecdc_cases.csv',\r\n", - " format = 'csv',\r\n", - " parser_version = '2.0',\r\n", - " firstrow = 2 ) as rows" - ], - "metadata": { - "azdata_cell_guid": "dbc4f12e-388c-49fa-9d85-0fbea3b19d1b" - }, - "outputs": [], - "execution_count": null - }, - { - "cell_type": "markdown", - "source": [ - "## Data source usage\n", - "\n", - "Previous example uses full path to the file. As an alternative, you can create an external data source with the location that points to the root folder of the storage:" - ], - "metadata": { - "azdata_cell_guid": "a373fa76-bfdf-4bb6-8098-73c9ef436eb8" - } - }, - { - "cell_type": "code", - "source": [ - "create external data source covid\r\n", - "with (\r\n", - " location = 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/ecdc_cases'\r\n", - ");" - ], - "metadata": { - "azdata_cell_guid": "48b6ee55-09ec-47df-bea5-707dc2f42aa8" - }, - "outputs": [], - "execution_count": null - }, - { - "cell_type": "markdown", - "source": [ - "Once you create a data source, you can use that data source and the relative path to the file in `OPENROWSET` function:" - ], - "metadata": { - "azdata_cell_guid": "c4145b77-8663-4e59-914b-721955a02635" - } - }, - { - "cell_type": "code", - "source": [ - "select\r\n", - " top 10 *\r\n", - "from\r\n", - " openrowset(\r\n", - " bulk 'latest/ecdc_cases.csv',\r\n", - " data_source = 'covid',\r\n", - " format = 'csv',\r\n", - " parser_version ='2.0',\r\n", - " firstrow = 2\r\n", - " ) as rows" - ], - "metadata": { - "azdata_cell_guid": "f3da158c-c168-45b0-8e38-7ee2d430420f" - }, - "outputs": [], - "execution_count": null - }, - { - "cell_type": "markdown", - "source": [ - "## Explicitly specify schema \n", - "\n", - "`OPENROWSET` enables you to explicitly specify what columns you want to read from the file using `WITH` clause:" - ], - "metadata": { - "azdata_cell_guid": "745b2c81-01eb-4bf5-9cad-47a03dcff194" - } - }, - { - "cell_type": "code", - "source": [ - "select\r\n", - " top 10 *\r\n", - "from\r\n", - " openrowset(\r\n", - " bulk 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/ecdc_cases/latest/ecdc_cases.csv',\r\n", - " format = 'csv',\r\n", - " parser_version ='2.0',\r\n", - " firstrow = 2\r\n", - " ) with (\r\n", - " date_rep date 1,\r\n", - " cases int 5,\r\n", - " geo_id varchar(6) 8\r\n", - " ) as rows" - ], - "metadata": { - "azdata_cell_guid": "e7bacd03-45d4-4b0b-b1d0-9522e1a54436" - }, - "outputs": [], - "execution_count": null - }, - { - "cell_type": "markdown", - "source": [ - "The numbers after a data type in the `WITH` clause represent column index in the CSV file." - ], - "metadata": { - "azdata_cell_guid": "4397f453-4b20-4083-ae0e-4966d789993f" - } - } - ] -} \ No newline at end of file diff --git a/Notebooks/TSQL/Jupiter/_content/quickstarts/json.ipynb b/Notebooks/TSQL/Jupiter/_content/quickstarts/json.ipynb deleted file mode 100644 index 330c2c9..0000000 --- a/Notebooks/TSQL/Jupiter/_content/quickstarts/json.ipynb +++ /dev/null @@ -1,158 +0,0 @@ -{ - "metadata": { - "kernelspec": { - "name": "SQL", - "display_name": "SQL", - "language": "sql" - }, - "language_info": { - "name": "sql", - "version": "" - } - }, - "nbformat_minor": 2, - "nbformat": 4, - "cells": [ - { - "cell_type": "markdown", - "source": [ - "# Query JSON files\n", - "\n", - "Serverless Synapse SQL pool enables you to read JSON files from Azure storage (DataLake or blob storage).\n", - "\n", - "## Read json line-delimited file\n", - "\n", - "One of the most common format that is used to store JSON documents is line-delimited JSON format (or JSON lines) where every JSOn document is placed in separate line separated with newline character. These files have extensions `jsonl`, `ldjson`, or `ndjson`.\n", - "\n", - "The easiest way to see to the content of your `jsonl` file is to provide file URL to `OPENROWSET` function and specify format `CSV`. If the file is publicly available or if your Azure AD identity can access this file, you should be able to see the content of the file using the query like the one shown in the following example:" - ], - "metadata": { - "azdata_cell_guid": "e01663cc-427c-457f-84db-b16d0fca3a90" - } - }, - { - "cell_type": "code", - "source": [ - "select top 10 *\r\n", - "from openrowset(\r\n", - " bulk 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/ecdc_cases/latest/ecdc_cases.jsonl',\r\n", - " format = 'csv',\r\n", - " fieldterminator ='0x0b',\r\n", - " fieldquote = '0x0b'\r\n", - " ) with (doc nvarchar(max)) as rows" - ], - "metadata": { - "azdata_cell_guid": "dbc4f12e-388c-49fa-9d85-0fbea3b19d1b" - }, - "outputs": [], - "execution_count": null - }, - { - "cell_type": "markdown", - "source": [ - "This query will return one row for every JSON document placed in separate line." - ], - "metadata": { - "azdata_cell_guid": "319c9414-ef30-440f-a3dd-f360a91fa145" - } - }, - { - "cell_type": "markdown", - "source": [ - "## Read json file\n", - "\n", - "Synapse SQL enables you to read entire content of JSON file as single text field:" - ], - "metadata": { - "azdata_cell_guid": "d2597313-6223-4b1e-a6fa-979be1a3ce6e" - } - }, - { - "cell_type": "code", - "source": [ - "select top 10 *\r\n", - "from openrowset(\r\n", - " bulk 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/ecdc_cases/latest/ecdc_cases.json',\r\n", - " format = 'csv',\r\n", - " fieldterminator ='0x0b',\r\n", - " fieldquote = '0x0b',\r\n", - " rowterminator = '0x0b' --> You need to override rowterminator to read classic JSON\r\n", - " ) with (doc nvarchar(max)) as rows" - ], - "metadata": { - "azdata_cell_guid": "2e5d0ff7-c4ca-45d6-b2fd-cfb83989af1d" - }, - "outputs": [], - "execution_count": null - }, - { - "cell_type": "markdown", - "source": [ - "## Parse JSON document\n", - "\n", - "The query below shows you how to use [JSON\\_VALUE](https://docs.microsoft.com/en-us/sql/t-sql/functions/json-value-transact-sql?toc=/azure/synapse-analytics/toc.json&bc=/azure/synapse-analytics/breadcrumb/toc.json&view=azure-sqldw-latest \"https://docs.microsoft.com/en-us/sql/t-sql/functions/json-value-transact-sql?toc=/azure/synapse-analytics/toc.json&bc=/azure/synapse-analytics/breadcrumb/toc.json&view=azure-sqldw-latest\") to retrieve scalar values (title, publisher) from the JSON documents:" - ], - "metadata": { - "azdata_cell_guid": "a373fa76-bfdf-4bb6-8098-73c9ef436eb8" - } - }, - { - "cell_type": "code", - "source": [ - "select\r\n", - " JSON_VALUE(doc, '$.date_rep') AS date_reported,\r\n", - " JSON_VALUE(doc, '$.countries_and_territories') AS country,\r\n", - " JSON_VALUE(doc, '$.cases') as cases,\r\n", - " doc\r\n", - "from openrowset(\r\n", - " bulk 'latest/ecdc_cases.jsonl',\r\n", - " data_source = 'covid',\r\n", - " format = 'csv',\r\n", - " fieldterminator ='0x0b',\r\n", - " fieldquote = '0x0b'\r\n", - " ) with (doc nvarchar(max)) as rows\r\n", - "order by JSON_VALUE(doc, '$.geo_id') desc" - ], - "metadata": { - "azdata_cell_guid": "48b6ee55-09ec-47df-bea5-707dc2f42aa8" - }, - "outputs": [], - "execution_count": null - }, - { - "cell_type": "markdown", - "source": [ - "As an alternative, you can use `OPENJSON` function to parse documents:" - ], - "metadata": { - "azdata_cell_guid": "c4145b77-8663-4e59-914b-721955a02635" - } - }, - { - "cell_type": "code", - "source": [ - "select\r\n", - " *\r\n", - "from openrowset(\r\n", - " bulk 'latest/ecdc_cases.jsonl',\r\n", - " data_source = 'covid',\r\n", - " format = 'csv',\r\n", - " fieldterminator ='0x0b',\r\n", - " fieldquote = '0x0b'\r\n", - " ) with (doc nvarchar(max)) as rows\r\n", - " cross apply openjson (doc)\r\n", - " with ( date_rep datetime2,\r\n", - " cases int,\r\n", - " fatal int '$.deaths',\r\n", - " country varchar(100) '$.countries_and_territories')\r\n", - "where country = 'Serbia'\r\n", - "order by country, date_rep desc;" - ], - "metadata": { - "azdata_cell_guid": "f3da158c-c168-45b0-8e38-7ee2d430420f" - }, - "outputs": [], - "execution_count": null - } - ] -} \ No newline at end of file diff --git a/Notebooks/TSQL/Jupiter/_content/quickstarts/parquet.ipynb b/Notebooks/TSQL/Jupiter/_content/quickstarts/parquet.ipynb deleted file mode 100644 index b49c7e4..0000000 --- a/Notebooks/TSQL/Jupiter/_content/quickstarts/parquet.ipynb +++ /dev/null @@ -1,169 +0,0 @@ -{ - "metadata": { - "kernelspec": { - "name": "SQL", - "display_name": "SQL", - "language": "sql" - }, - "language_info": { - "name": "sql", - "version": "" - } - }, - "nbformat_minor": 2, - "nbformat": 4, - "cells": [ - { - "cell_type": "markdown", - "source": [ - "# Query PARQUET files\n", - "\n", - "Serverless Synapse SQL pool enables you to read PARQUET files from Azure storage (DataLake or blob storage).\n", - "\n", - "## Read parquet file\n", - "\n", - "The easiest way to see to the content of your `PARQUET` file is to provide file URL to `OPENROWSET` function and specify parquet `FORMAT`. If the file is publicly available or if your Azure AD identity can access this file, you should be able to see the content of the file using the query like the one shown in the following example:" - ], - "metadata": { - "azdata_cell_guid": "e01663cc-427c-457f-84db-b16d0fca3a90" - } - }, - { - "cell_type": "code", - "source": [ - "select top 10 *\r\n", - "from openrowset(\r\n", - " bulk 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/ecdc_cases/latest/ecdc_cases.parquet',\r\n", - " format = 'parquet') as rows" - ], - "metadata": { - "azdata_cell_guid": "dbc4f12e-388c-49fa-9d85-0fbea3b19d1b" - }, - "outputs": [], - "execution_count": null - }, - { - "cell_type": "markdown", - "source": [ - "## Data source usage\n", - "\n", - "Previous example uses full path to the file. As an alternative, you can create an external data source with the location that points to the root folder of the storage, and use that data source and the relative path to the file in `OPENROWSET` function.\n", - "\n", - "First you need to create `EXTERNAL DATA SOURCE` in some database:" - ], - "metadata": { - "azdata_cell_guid": "a373fa76-bfdf-4bb6-8098-73c9ef436eb8" - } - }, - { - "cell_type": "code", - "source": [ - "create external data source covid\r\n", - "with ( location = 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/ecdc_cases' );" - ], - "metadata": { - "azdata_cell_guid": "48b6ee55-09ec-47df-bea5-707dc2f42aa8" - }, - "outputs": [], - "execution_count": null - }, - { - "cell_type": "markdown", - "source": [ - "Make sure that you create `EXTERNAL DATA SOURCE` in database other than `master`. If data source is protected with some credential you might need to create credential that is associated to data source.\r\n", - "\r\n", - "Once you have properly configures data source, you can use it in `OPENROWSET` function:" - ], - "metadata": { - "azdata_cell_guid": "4e487b5a-657a-4c2d-b24c-d9c755d27e4c" - } - }, - { - "cell_type": "code", - "source": [ - "select top 10 *\r\n", - "from openrowset(\r\n", - " bulk 'latest/ecdc_cases.parquet',\r\n", - " data_source = 'covid',\r\n", - " format = 'parquet'\r\n", - " ) as rows" - ], - "metadata": { - "azdata_cell_guid": "6ab5dd60-2dfe-4c19-a390-0c1505b0bde9" - }, - "outputs": [], - "execution_count": null - }, - { - "cell_type": "markdown", - "source": [ - "## Explicitly specify schema\n", - "\n", - "`OPENROWSET` enables you to explicitly specify what are the types of the columns that you want to read from the file using `WITH` clause:" - ], - "metadata": { - "azdata_cell_guid": "c4145b77-8663-4e59-914b-721955a02635" - } - }, - { - "cell_type": "code", - "source": [ - "select top 10 *\r\n", - "from openrowset(\r\n", - " bulk 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/ecdc_cases/latest/ecdc_cases.parquet',\r\n", - " format = 'parquet'\r\n", - " ) with ( date_rep date, cases int, geo_id varchar(6) ) as rows" - ], - "metadata": { - "azdata_cell_guid": "f3da158c-c168-45b0-8e38-7ee2d430420f" - }, - "outputs": [], - "execution_count": null - }, - { - "cell_type": "markdown", - "source": [ - "PARQUET data types are by default mapped to SQL types. The following table describes how Parquet types are mapped to SQL native types.\n", - "\n", - "| Parquet type | Parquet logical type (annotation) | SQL data type |\n", - "| --- | --- | --- |\n", - "| BOOLEAN | | bit |\n", - "| BINARY / BYTE\\_ARRAY | | varbinary |\n", - "| DOUBLE | | float |\n", - "| FLOAT | | real |\n", - "| INT32 | | int |\n", - "| INT64 | | bigint |\n", - "| INT96 | | datetime2 |\n", - "| FIXED\\_LEN\\_BYTE\\_ARRAY | | binary |\n", - "| BINARY | UTF8 | varchar \\*(UTF8 collation) |\n", - "| BINARY | STRING | varchar \\*(UTF8 collation) |\n", - "| BINARY | ENUM | varchar \\*(UTF8 collation) |\n", - "| BINARY | UUID | uniqueidentifier |\n", - "| BINARY | DECIMAL | decimal |\n", - "| BINARY | JSON | varchar(max) \\*(UTF8 collation) |\n", - "| BINARY | BSON | varbinary(max) |\n", - "| FIXED\\_LEN\\_BYTE\\_ARRAY | DECIMAL | decimal |\n", - "| BYTE\\_ARRAY | INTERVAL | varchar(max), serialized into standardized format |\n", - "| INT32 | INT(8, true) | smallint |\n", - "| INT32 | INT(16, true) | smallint |\n", - "| INT32 | INT(32, true) | int |\n", - "| INT32 | INT(8, false) | tinyint |\n", - "| INT32 | INT(16, false) | int |\n", - "| INT32 | INT(32, false) | bigint |\n", - "| INT32 | DATE | date |\n", - "| INT32 | DECIMAL | decimal |\n", - "| INT32 | TIME (MILLIS ) | time |\n", - "| INT64 | INT(64, true) | bigint |\n", - "| INT64 | INT(64, false ) | decimal(20,0) |\n", - "| INT64 | DECIMAL | decimal |\n", - "| INT64 | TIME (MICROS / NANOS) | time |\n", - "| INT64 | TIMESTAMP (MILLIS / MICROS / NANOS) | datetime2 |\n", - "| [Complex type](https://github.com/apache/parquet-format/blob/master/LogicalTypes.md#lists \"https://github.com/apache/parquet-format/blob/master/LogicalTypes.md#lists\") | LIST | varchar(max), serialized into JSON |\n", - "| [Complex type](https://github.com/apache/parquet-format/blob/master/LogicalTypes.md#maps \"https://github.com/apache/parquet-format/blob/master/LogicalTypes.md#maps\") | MAP | varchar(max), serialized into JSON |" - ], - "metadata": { - "azdata_cell_guid": "745b2c81-01eb-4bf5-9cad-47a03dcff194" - } - } - ] -} \ No newline at end of file diff --git a/Notebooks/TSQL/Jupiter/_content/quickstarts/readme.md b/Notebooks/TSQL/Jupiter/_content/quickstarts/readme.md deleted file mode 100644 index e8ef14d..0000000 --- a/Notebooks/TSQL/Jupiter/_content/quickstarts/readme.md +++ /dev/null @@ -1,8 +0,0 @@ -# Azure Synapse Analytics quick-starts - -This book contains quick-start sample that demonstrate how to query the following types of files: -- [PARQUET](parquet.ipynb) -- [CSV](csv.ipynb) -- [JSON](json.ipynb) - -Open a notebook, select SQL kernel and connect to your Synapse SQL endpoint. Follow the instructions in the quick-start samples. diff --git a/Notebooks/TSQL/Jupiter/_content/readme.md b/Notebooks/TSQL/Jupiter/_content/readme.md deleted file mode 100644 index 86fae14..0000000 --- a/Notebooks/TSQL/Jupiter/_content/readme.md +++ /dev/null @@ -1,26 +0,0 @@ -# Azure Synapse Analytics - -This book contains tutorials that demo how to use serverless Synapse SQL pool to analyze data on Azure Storage. - -## Prerequisites - -To start tutorials, you would need to have Synapse Analytics workspace. - -If you don't have one, you can deploy a workspace with underlying Data Lake Storage. Select the **Deploy to Azure** button to deploy the workspave. The template will open in the Azure portal. - -Deploy to Azure - -If you don't have an Azure subscription, create a free account before you begin.

- -The template defines two resources: -- Storage account -- Workspace - -## Samples - -This book contains the following samples: - -- Quick-start samples - reading [PARQUET](quickstarts/parquet.ipynb), [CSV](quickstarts/csv.ipynb) and [JSON](quickstarts/json.ipynb) -- Tutorials - [Analyze COVID data set provided by ECDC](tutorials/covid-ecdc.ipynb) and [Analyze NY Taxi rides](tutorials/ny-taxi.ipynb) - -Open some of these notebooks, select SQL kernel and connect to your Synapse SQL endpoint. Follow the instructions in tutorials to run the samples. diff --git a/Notebooks/TSQL/Jupiter/_content/tutorials/covid-ecdc.ipynb b/Notebooks/TSQL/Jupiter/_content/tutorials/covid-ecdc.ipynb deleted file mode 100644 index 61b20a2..0000000 --- a/Notebooks/TSQL/Jupiter/_content/tutorials/covid-ecdc.ipynb +++ /dev/null @@ -1,257 +0,0 @@ -{ - "metadata": { - "kernelspec": { - "name": "SQL", - "display_name": "SQL", - "language": "sql" - }, - "language_info": { - "name": "sql", - "version": "" - } - }, - "nbformat_minor": 2, - "nbformat": 4, - "cells": [ - { - "cell_type": "markdown", - "source": [ - "# Analyze ECDC COVID data using Azure Synapse serverless SQL pool\n", - "\n", - "In this notebook, you will see how you can analyze the distribution of COVID cases reported in Serbia (Europe) using Synapse SQL endpoint in Synapse Analytics. Synapse SQL engine is the perfect choice for ad-hoc data analytics for the data analysts with T-SQL skills. The data set is placed on [Azure storage](https://azure.microsoft.com/en-us/services/open-datasets/catalog/ecdc-covid-19-cases/ \"https://azure.microsoft.com/en-us/services/open-datasets/catalog/ecdc-covid-19-cases/\") and formatted as parquet. \n", - "\n", - "## Explore your data\n", - "\n", - "As a first step we need to explore data in the file place in Azure storage using `OPENROWSET` function:" - ], - "metadata": { - "azdata_cell_guid": "b0bfbef2-8271-48da-be46-9d102c04ae3e" - } - }, - { - "cell_type": "code", - "source": [ - "select top 10 *\r\n", - "from openrowset(bulk 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/ecdc_cases/latest/ecdc_cases.parquet',\r\n", - " format='parquet') as a" - ], - "metadata": { - "azdata_cell_guid": "fef36ba3-39d7-4dda-a544-29d301e85724" - }, - "outputs": [], - "execution_count": null - }, - { - "cell_type": "markdown", - "source": [ - "Here we can see that some of the columns interesting for analysis are `DATE_REP` and `CASES`. I would like to analyze number of cases reported in Serbia, so I would need to filter the results using `GEO_ID` column.\n", - "\n", - "We are not sure what is `geo_id` value for Serbia, so we will find all distinct countries and `geo_id` values where country is something like Serbia:" - ], - "metadata": { - "azdata_cell_guid": "892b5348-a006-45bb-bbab-9d3eb935c643" - } - }, - { - "cell_type": "code", - "source": [ - "select distinct countries_and_territories, geo_id\r\n", - "from openrowset(bulk 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/ecdc_cases/latest/ecdc_cases.parquet',\r\n", - " format='parquet') as a\r\n", - "where countries_and_territories like '%ser%'" - ], - "metadata": { - "azdata_cell_guid": "d9a34e8f-8ee8-498a-87c0-d0210ba08bd0" - }, - "outputs": [], - "execution_count": null - }, - { - "cell_type": "markdown", - "source": [ - "Since we see that `GEO_ID` for Serbia is `RS`, we can find dayly number of cases in Serbia:" - ], - "metadata": { - "azdata_cell_guid": "934198a6-a06b-42cb-a027-3f30614ca0f6" - } - }, - { - "cell_type": "code", - "source": [ - "select DATE_REP, CASES\r\n", - "from openrowset(bulk 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/ecdc_cases/latest/ecdc_cases.parquet',\r\n", - " format='parquet') as a\r\n", - "where geo_id = 'RS'\r\n", - "order by date_rep" - ], - "metadata": { - "azdata_cell_guid": "c399cbd1-bf74-4ea4-8fa4-72c486270ae7" - }, - "outputs": [], - "execution_count": null - }, - { - "cell_type": "markdown", - "source": [ - "We can show this in the chart to see trend analysis of reported COVID cases in Serbia. By looking at this chart, we can see that the peek is somewhere between 15th and 20th April and the peak in the second wave is second half of July.\n", - "\n", - "The points on time series charts are shown per daily basis. This might lead to daily variation, so you might want to show the graph with average values calculated in the window with +/- 1-2 days. T-SQL enables you to easily calculate average values if you specify time window:\n", - "\n", - "```\n", - "AVG(CASES) OVER(order by date_rep ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING )\n", - "```\n", - "\n", - "We need to specify how to locally order data and number of preceding/following rows that AVG function should use to calculate the average value within the window. The time series query that uses average values is shown on the following code:" - ], - "metadata": { - "azdata_cell_guid": "91e78e94-3aa0-46a4-ba9c-2b0a046f0f6c" - } - }, - { - "cell_type": "code", - "source": [ - "select DATE_REP,\r\n", - " CASES_AVG = AVG(CASES) OVER(ORDER BY date_rep ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING )\r\n", - "from openrowset(bulk 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/ecdc_cases/latest/ecdc_cases.parquet', format='parquet') as a\r\n", - "where geo_id = 'RS'\r\n", - "order by date_rep" - ], - "metadata": { - "azdata_cell_guid": "75f965dd-4565-4561-9dcd-fbf517bb5250" - }, - "outputs": [], - "execution_count": null - }, - { - "cell_type": "markdown", - "source": [ - "We can also show cumulative values to see increase of the number of cases over time (this is known as running total):" - ], - "metadata": { - "azdata_cell_guid": "3d861e0d-a2a6-4599-a84d-620479c66c68" - } - }, - { - "cell_type": "code", - "source": [ - "select DATE_REP,\r\n", - " CUMULATIVE = SUM(CASES) OVER (ORDER BY date_rep)\r\n", - "from openrowset(bulk 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/ecdc_cases/latest/ecdc_cases.parquet',\r\n", - " format='parquet') as a\r\n", - "where geo_id = 'RS'\r\n", - "order by date_rep" - ], - "metadata": { - "azdata_cell_guid": "f7b7457e-2e58-43f3-908e-0e564b262a7b" - }, - "outputs": [], - "execution_count": null - }, - { - "cell_type": "markdown", - "source": [ - "If we switch to chart we can see cumulative number of cases that are reported since the first COVID case.\n", - "\n", - "SQL language enables us to easily lookup number of reported cases couple of days after or before using LAG and LEAD functions. the following query will return number of cases reported 7 days ago:" - ], - "metadata": { - "azdata_cell_guid": "2dc5f582-3371-41fb-9e83-293a20876beb" - } - }, - { - "cell_type": "code", - "source": [ - "select TOP 10 date_rep,\r\n", - " cases,\r\n", - " prev = LAG(CASES, 7) OVER(partition by geo_id order by date_rep )\r\n", - "from openrowset(bulk 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/ecdc_cases/latest/ecdc_cases.parquet',\r\n", - " format='parquet') as a\r\n", - "where geo_id = 'RS'\r\n", - "order by date_rep desc;" - ], - "metadata": { - "azdata_cell_guid": "3ce22b19-d0c8-4e33-ac99-65616680fbb7" - }, - "outputs": [], - "execution_count": null - }, - { - "cell_type": "markdown", - "source": [ - "You can notice in the result that prev column lag 7 days to the current column. Now we can easily compare the difference between the current number of reported cases of the number of reported cases reported or percent of increase:\n", - "\n", - "```\n", - "WoW% = (cases - prev) / prev\n", - " = cases/prev - 1\n", - "```\n", - "\n", - "Instead of simple comparison of current and previous value, we can make this more reliable and first calculate the average values in the 7-day windows and then calculate increase using these values:" - ], - "metadata": { - "azdata_cell_guid": "6a888617-355b-4b9d-ac22-352aa0661a20" - } - }, - { - "cell_type": "code", - "source": [ - "with ecdc as (\r\n", - " select\r\n", - " date_rep,\r\n", - " cases = AVG(CASES) OVER(partition by geo_id order by date_rep ROWS BETWEEN 7 PRECEDING AND CURRENT ROW ),\r\n", - " prev = AVG(CASES) OVER(partition by geo_id order by date_rep ROWS BETWEEN 14 PRECEDING AND 7 PRECEDING )\r\n", - " from\r\n", - " openrowset(bulk 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/ecdc_cases/latest/ecdc_cases.parquet',\r\n", - " format='parquet') as a\r\n", - " where\r\n", - " geo_id = 'RS'\r\n", - ")\r\n", - "select date_rep, cases, prev, [WoW%] = 100*(1.0*cases/prev - 1)\r\n", - "from ecdc\r\n", - "where prev > 10\r\n", - "order by date_rep desc;" - ], - "metadata": { - "azdata_cell_guid": "c5828567-0d08-4f43-bfd1-34c78e643343" - }, - "outputs": [], - "execution_count": null - }, - { - "cell_type": "markdown", - "source": [ - "This query will calculate the average number of cases in 7-day window and calculate week over week change.\n", - "\n", - "We can go step further and use the same query to run analysis across all countries in the world to calculate weekly changes and find the countries with the highest increase of COVID cases compared to the previous week." - ], - "metadata": { - "azdata_cell_guid": "08ea9412-2c60-4a7c-affc-2eb6115f20b3" - } - }, - { - "cell_type": "code", - "source": [ - "with weekly_cases as (\r\n", - " select geo_id, date_rep, country = countries_and_territories,\r\n", - " current_avg = AVG(CASES) OVER(partition by geo_id order by date_rep ROWS BETWEEN 7 PRECEDING AND CURRENT ROW ),\r\n", - " prev_avg = AVG(CASES) OVER(partition by geo_id order by date_rep ROWS BETWEEN 14 PRECEDING AND 7 PRECEDING )\r\n", - " from openrowset(bulk 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/ecdc_cases/latest/ecdc_cases.parquet',\r\n", - " format='parquet') as a \r\n", - ")\r\n", - "select top 10 \r\n", - " country, \r\n", - " current_avg,\r\n", - " prev_avg, \r\n", - " [WoW%] = CAST((100*(1.* current_avg / prev_avg - 1)) AS smallint)\r\n", - "from weekly_cases\r\n", - "where date_rep = CONVERT(date, DATEADD(DAY, -1, GETDATE()), 23)\r\n", - "and prev_avg > 100\r\n", - "order by (1. * current_avg / prev_avg -1) desc" - ], - "metadata": { - "azdata_cell_guid": "f338436e-d98d-4c1b-8c61-3ad838059cc0" - }, - "outputs": [], - "execution_count": null - } - ] -} \ No newline at end of file diff --git a/Notebooks/TSQL/Jupiter/_content/tutorials/ny-taxi.ipynb b/Notebooks/TSQL/Jupiter/_content/tutorials/ny-taxi.ipynb deleted file mode 100644 index f74d790..0000000 --- a/Notebooks/TSQL/Jupiter/_content/tutorials/ny-taxi.ipynb +++ /dev/null @@ -1,270 +0,0 @@ -{ - "metadata": { - "kernelspec": { - "name": "SQL", - "display_name": "SQL", - "language": "sql" - }, - "language_info": { - "name": "sql", - "version": "" - } - }, - "nbformat_minor": 2, - "nbformat": 4, - "cells": [ - { - "cell_type": "markdown", - "source": [ - "# Analyze NY taxi data\n", - "In this tutorial, we will perform exploratory data analysis by combining different Azure Open Datasets using serverless SQL and then visualizing the results in Azure Data Studio. In particular, you analyze the [New York City (NYC) Taxi dataset](https://azure.microsoft.com/services/open-datasets/catalog/nyc-taxi-limousine-commission-yellow-taxi-trip-records/ \"https://azure.microsoft.com/services/open-datasets/catalog/nyc-taxi-limousine-commission-yellow-taxi-trip-records/\").\n", - "You can learn more about the meaning of the individual columns in the descriptions of the [NYC Taxi](https://azure.microsoft.com/services/open-datasets/catalog/nyc-taxi-limousine-commission-yellow-taxi-trip-records/ \"https://azure.microsoft.com/services/open-datasets/catalog/nyc-taxi-limousine-commission-yellow-taxi-trip-records/\"), [Public Holidays](https://azure.microsoft.com/services/open-datasets/catalog/public-holidays/ \"https://azure.microsoft.com/services/open-datasets/catalog/public-holidays/\"), and [Weather Data](https://azure.microsoft.com/services/open-datasets/catalog/noaa-integrated-surface-data/ \"https://azure.microsoft.com/services/open-datasets/catalog/noaa-integrated-surface-data/\") Azure open datasets.\n", - "Let's first get familiar with the NYC Taxi data by running the following query:" - ], - "metadata": { - "azdata_cell_guid": "e01663cc-427c-457f-84db-b16d0fca3a90" - } - }, - { - "cell_type": "code", - "source": [ - "SELECT TOP 10 * FROM\r\n", - " OPENROWSET(\r\n", - " BULK 'https://azureopendatastorage.blob.core.windows.net/nyctlc/yellow/puYear=*/puMonth=*/*.parquet',\r\n", - " FORMAT='PARQUET'\r\n", - " ) AS [nyc]" - ], - "metadata": { - "azdata_cell_guid": "dbc4f12e-388c-49fa-9d85-0fbea3b19d1b" - }, - "outputs": [], - "execution_count": null - }, - { - "cell_type": "markdown", - "source": [ - "Similarly, we can explore the Public Holidays dataset:" - ], - "metadata": { - "azdata_cell_guid": "a373fa76-bfdf-4bb6-8098-73c9ef436eb8" - } - }, - { - "cell_type": "code", - "source": [ - "SELECT TOP 10 * FROM\r\n", - " OPENROWSET(\r\n", - " BULK 'https://azureopendatastorage.blob.core.windows.net/holidaydatacontainer/Processed/*.parquet',\r\n", - " FORMAT='PARQUET'\r\n", - " ) AS [holidays]" - ], - "metadata": { - "azdata_cell_guid": "48b6ee55-09ec-47df-bea5-707dc2f42aa8" - }, - "outputs": [], - "execution_count": null - }, - { - "cell_type": "markdown", - "source": [ - "Lastly, we can also explore the Weather Data dataset by using the following query:" - ], - "metadata": { - "azdata_cell_guid": "c4145b77-8663-4e59-914b-721955a02635" - } - }, - { - "cell_type": "code", - "source": [ - "SELECT\r\n", - " TOP 10 *\r\n", - "FROM \r\n", - " OPENROWSET(\r\n", - " BULK 'https://azureopendatastorage.blob.core.windows.net/isdweatherdatacontainer/ISDWeather/year=*/month=*/*.parquet',\r\n", - " FORMAT='PARQUET'\r\n", - " ) AS [weather]" - ], - "metadata": { - "azdata_cell_guid": "f3da158c-c168-45b0-8e38-7ee2d430420f" - }, - "outputs": [], - "execution_count": null - }, - { - "cell_type": "markdown", - "source": [ - "## Time series, seasonality, and outlier analysis\n", - "\n", - "We can easily summarize the yearly number of taxi rides by using the following query:" - ], - "metadata": { - "azdata_cell_guid": "745b2c81-01eb-4bf5-9cad-47a03dcff194" - } - }, - { - "cell_type": "code", - "source": [ - "SELECT\r\n", - " YEAR(tpepPickupDateTime) AS current_year,\r\n", - " COUNT(*) AS rides_per_year\r\n", - "FROM\r\n", - " OPENROWSET(\r\n", - " BULK 'https://azureopendatastorage.blob.core.windows.net/nyctlc/yellow/puYear=*/puMonth=*/*.parquet',\r\n", - " FORMAT='PARQUET'\r\n", - " ) AS [nyc]\r\n", - "WHERE nyc.filepath(1) >= '2009' AND nyc.filepath(1) <= '2019'\r\n", - "GROUP BY YEAR(tpepPickupDateTime)\r\n", - "ORDER BY 1 ASC" - ], - "metadata": { - "azdata_cell_guid": "e7bacd03-45d4-4b0b-b1d0-9522e1a54436" - }, - "outputs": [], - "execution_count": null - }, - { - "cell_type": "markdown", - "source": [ - "The data can be visualized in Azure Data Studio by switching from the Table to the Chart view. You can choose among different chart types, such as Area, Bar, Column, Line, Pie, and Scatter.  \n", - "\n", - "From this visualization, a trend of a decreasing number of rides over years can be clearly seen. Presumably, this decrease is due to the recent increased popularity of ride-sharing companies.\n", - "\n", - "Next, let's focus the analysis on a single year, for example, 2016. The following query returns the daily number of rides during that year:" - ], - "metadata": { - "azdata_cell_guid": "4397f453-4b20-4083-ae0e-4966d789993f" - } - }, - { - "cell_type": "code", - "source": [ - "SELECT\r\n", - " CAST([tpepPickupDateTime] AS DATE) AS [current_day],\r\n", - " COUNT(*) as rides_per_day\r\n", - "FROM\r\n", - " OPENROWSET(\r\n", - " BULK 'https://azureopendatastorage.blob.core.windows.net/nyctlc/yellow/puYear=*/puMonth=*/*.parquet',\r\n", - " FORMAT='PARQUET'\r\n", - " ) AS [nyc]\r\n", - "WHERE nyc.filepath(1) = '2016'\r\n", - "GROUP BY CAST([tpepPickupDateTime] AS DATE)\r\n", - "ORDER BY 1 ASC" - ], - "metadata": { - "azdata_cell_guid": "e01007a4-adda-460a-83e0-e45a789c80cb" - }, - "outputs": [], - "execution_count": null - }, - { - "cell_type": "markdown", - "source": [ - "Again, we can easily visualize data by plotting the Column chart with the Category column set to `current_day` and the Legend (series) column set to `rides_per_day`.\n", - "\n", - "From the plot chart, you can see there's a weekly pattern, with Saturdays as the peak day. During summer months, there are fewer taxi rides because of vacations. Also, notice some significant drops in the number of taxi rides without a clear pattern of when and why they occur.\n", - "\n", - "Next, let's see if the drops correlate with public holidays by joining the NYC Taxi rides dataset with the Public Holidays dataset:" - ], - "metadata": { - "azdata_cell_guid": "455f1a05-87bc-4a83-8856-7ac9adc76af0" - } - }, - { - "cell_type": "code", - "source": [ - "WITH\r\n", - "taxi_rides AS\r\n", - "(\r\n", - " SELECT\r\n", - " CAST([tpepPickupDateTime] AS DATE) AS [current_day],\r\n", - " COUNT(*) as rides_per_day\r\n", - " FROM \r\n", - " OPENROWSET(\r\n", - " BULK 'https://azureopendatastorage.blob.core.windows.net/nyctlc/yellow/puYear=*/puMonth=*/*.parquet',\r\n", - " FORMAT='PARQUET'\r\n", - " ) AS [nyc]\r\n", - " WHERE nyc.filepath(1) = '2016'\r\n", - " GROUP BY CAST([tpepPickupDateTime] AS DATE)\r\n", - "),\r\n", - "public_holidays AS\r\n", - "(\r\n", - " SELECT\r\n", - " 500000 as holiday,\r\n", - " date\r\n", - " FROM\r\n", - " OPENROWSET(\r\n", - " BULK 'https://azureopendatastorage.blob.core.windows.net/holidaydatacontainer/Processed/*.parquet',\r\n", - " FORMAT='PARQUET'\r\n", - " ) AS [holidays]\r\n", - " WHERE countryorregion = 'United States' AND YEAR(date) = 2016\r\n", - ")\r\n", - "SELECT\r\n", - "*\r\n", - "FROM taxi_rides t\r\n", - "LEFT OUTER JOIN public_holidays p on t.current_day = p.date\r\n", - "ORDER BY current_day ASC" - ], - "metadata": { - "azdata_cell_guid": "710cb813-a14d-4daa-8436-7a0086e4381f" - }, - "outputs": [], - "execution_count": null - }, - { - "cell_type": "markdown", - "source": [ - "From the plot chart, you can see that during public holidays the number of taxi rides is lower. There's still one unexplained large drop on January 23. Let's check the weather in NYC on that day by querying the Weather Data dataset:" - ], - "metadata": { - "azdata_cell_guid": "a2160c53-23d2-4243-94ad-7c3408c49080" - } - }, - { - "cell_type": "code", - "source": [ - "SELECT\r\n", - " AVG(windspeed) AS avg_windspeed,\r\n", - " MIN(windspeed) AS min_windspeed,\r\n", - " MAX(windspeed) AS max_windspeed,\r\n", - " AVG(temperature) AS avg_temperature,\r\n", - " MIN(temperature) AS min_temperature,\r\n", - " MAX(temperature) AS max_temperature,\r\n", - " AVG(sealvlpressure) AS avg_sealvlpressure,\r\n", - " MIN(sealvlpressure) AS min_sealvlpressure,\r\n", - " MAX(sealvlpressure) AS max_sealvlpressure,\r\n", - " AVG(precipdepth) AS avg_precipdepth,\r\n", - " MIN(precipdepth) AS min_precipdepth,\r\n", - " MAX(precipdepth) AS max_precipdepth,\r\n", - " AVG(snowdepth) AS avg_snowdepth,\r\n", - " MIN(snowdepth) AS min_snowdepth,\r\n", - " MAX(snowdepth) AS max_snowdepth\r\n", - "FROM\r\n", - " OPENROWSET(\r\n", - " BULK 'https://azureopendatastorage.blob.core.windows.net/isdweatherdatacontainer/ISDWeather/year=*/month=*/*.parquet',\r\n", - " FORMAT='PARQUET'\r\n", - " ) AS [weather]\r\n", - "WHERE countryorregion = 'US' AND CAST([datetime] AS DATE) = '2016-01-23' AND stationname = 'JOHN F KENNEDY INTERNATIONAL AIRPORT'" - ], - "metadata": { - "azdata_cell_guid": "aa7087b1-fb8d-43cc-a580-afa1ff6d9741" - }, - "outputs": [], - "execution_count": null - }, - { - "cell_type": "markdown", - "source": [ - "The results of the query indicate that the drop in the number of taxi rides occurred because:\n", - "\n", - "- There was a blizzard on that day in NYC with heavy snow (~30 cm).\n", - "- It was cold (temperature was below zero degrees Celsius).\n", - "- It was windy (~10 m/s).\n", - "\n", - "This tutorial has shown how a data analyst can quickly perform exploratory data analysis, easily combine different datasets by using serverless Synapse SQL pool, and visualize the results by using Azure Data Studio." - ], - "metadata": { - "azdata_cell_guid": "be7f6d54-0301-4fbd-be89-56472649e6f9" - } - } - ] -} \ No newline at end of file diff --git a/Notebooks/TSQL/Jupiter/_content/tutorials/readme.md b/Notebooks/TSQL/Jupiter/_content/tutorials/readme.md deleted file mode 100644 index ac164c1..0000000 --- a/Notebooks/TSQL/Jupiter/_content/tutorials/readme.md +++ /dev/null @@ -1,8 +0,0 @@ -# Azure Synapse Analytics tutorials - -This book contains tutorials that demo how to use serverless Synapse SQL pool to analyze data on Azure Storage. This book contains two tutorials: - -- [Analyze COVID ECDC data set](covid-ecdc.ipynb) - In this tutorial, we will perform exploratory data analysis by combining different Azure Open Datasets using serverless SQL and then visualizing the results in Azure Data Studio. In particular, you analyze the New York City (NYC) Taxi dataset. You can learn more about the meaning of the individual columns in the descriptions of the NYC Taxi, Public Holidays, and Weather Data Azure open datasets. -- [Analyze NY Taxi rides](ny-taxi.ipynb) - In this tutorial, you learn how to perform exploratory data analysis by combining different Azure Open Datasets using serverless Synapse SQL pool and then visualizing the results in Azure Synapse Studio. - -Open a notebook, select SQL kernel and connect to your Synapse SQL endpoint. Follow the instructions in the tutorials. diff --git a/Notebooks/TSQL/Jupiter/_data/toc.yml b/Notebooks/TSQL/Jupiter/_data/toc.yml index 2521fd7..aef4d86 100644 --- a/Notebooks/TSQL/Jupiter/_data/toc.yml +++ b/Notebooks/TSQL/Jupiter/_data/toc.yml @@ -3,6 +3,19 @@ - title: Search search: true +- title: Quick-starts + url: /quickstarts/readme + not_numbered: true + expand_sections: true + sections: + - title: Read Parquet files + url: /quickstarts/parquet + - title: Read Csv files + url: /quickstarts/csv + - title: Read Delta Lake folders + url: /quickstarts/delta-lake + - title: Read JSON files + url: /quickstarts/json - title: Tutorials url: /tutorials/readme not_numbered: true diff --git a/Notebooks/TSQL/Jupiter/content/quickstarts/delta-lake.ipynb b/Notebooks/TSQL/Jupiter/content/quickstarts/delta-lake.ipynb new file mode 100644 index 0000000..d0a9575 --- /dev/null +++ b/Notebooks/TSQL/Jupiter/content/quickstarts/delta-lake.ipynb @@ -0,0 +1,1852 @@ +{ + "metadata": { + "kernelspec": { + "name": "SQL", + "display_name": "SQL", + "language": "sql" + }, + "language_info": { + "name": "sql", + "version": "" + } + }, + "nbformat_minor": 2, + "nbformat": 4, + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Query Delta Lake folders\n", + "\n", + "Serverless Synapse SQL pool enables you to read Delta Lake files from Azure storage (DataLake or blob storage).\n", + "\n", + "![Delta Lake folder](img/covid-delta-lake-studio.png)\n", + "\n", + "## Read Delta Lake folder\n", + "\n", + "The easiest way to see to the content of your Delta Lake file is to provide Delta Lake folder URL to `OPENROWSET` function and specify parquet `DELTA`. If the file is publicly available or if your Azure AD identity can access this file, you should be able to see the content of the file using the query like the one shown in the following example:" + ], + "metadata": { + "azdata_cell_guid": "e01663cc-427c-457f-84db-b16d0fca3a90" + } + }, + { + "cell_type": "code", + "source": [ + "select top 10 *\r\n", + "from openrowset(\r\n", + " bulk 'https://sqlondemandstorage.blob.core.windows.net/delta-lake/covid/',\r\n", + " format = 'delta') as rows" + ], + "metadata": { + "azdata_cell_guid": "dbc4f12e-388c-49fa-9d85-0fbea3b19d1b" + }, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/html": "Statement ID: {9D076051-65F3-4173-803E-965E3F63F229} | Query hash: 0x2607A6E4C1BCC82C | Distributed request ID: {F61831C7-0B1C-4C10-8A10-D3D05FE31CE6}. Total size of data scanned is 1 megabytes, total size of data moved is 1 megabytes, total size of data written is 0 megabytes." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "(10 rows affected)" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:02.412" + }, + "metadata": {} + }, + { + "output_type": "execute_result", + "metadata": { + "resultSet": { + "id": 0, + "batchId": 0, + "rowCount": 10, + "complete": true, + "columnInfo": [ + { + "isBytes": false, + "isChars": false, + "isSqlVariant": false, + "isUdt": false, + "isXml": false, + "isJson": false, + "sqlDbType": 31, + "isHierarchyId": false, + "isSqlXmlType": false, + "isUnknownType": false, + "isUpdatable": true, + "allowDBNull": true, + "baseCatalogName": null, + "baseColumnName": null, + "baseSchemaName": null, + "baseServerName": null, + "baseTableName": null, + "columnName": "date_rep", + "columnOrdinal": 0, + "columnSize": 3, + "isAliased": null, + "isAutoIncrement": false, + "isExpression": null, + "isHidden": null, + "isIdentity": false, + "isKey": null, + "isLong": false, + "isReadOnly": false, + "isUnique": false, + "numericPrecision": 255, + "numericScale": 255, + "udtAssemblyQualifiedName": null, + "dataType": "System.DateTime, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", + "dataTypeName": "date" + }, + { + "isBytes": false, + "isChars": false, + "isSqlVariant": false, + "isUdt": false, + "isXml": false, + "isJson": false, + "sqlDbType": 16, + "isHierarchyId": false, + "isSqlXmlType": false, + "isUnknownType": false, + "isUpdatable": true, + "allowDBNull": true, + "baseCatalogName": null, + "baseColumnName": null, + "baseSchemaName": null, + "baseServerName": null, + "baseTableName": null, + "columnName": "day", + "columnOrdinal": 1, + "columnSize": 2, + "isAliased": null, + "isAutoIncrement": false, + "isExpression": null, + "isHidden": null, + "isIdentity": false, + "isKey": null, + "isLong": false, + "isReadOnly": false, + "isUnique": false, + "numericPrecision": 5, + "numericScale": 255, + "udtAssemblyQualifiedName": null, + "dataType": "System.Int16, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", + "dataTypeName": "smallint" + }, + { + "isBytes": false, + "isChars": false, + "isSqlVariant": false, + "isUdt": false, + "isXml": false, + "isJson": false, + "sqlDbType": 16, + "isHierarchyId": false, + "isSqlXmlType": false, + "isUnknownType": false, + "isUpdatable": true, + "allowDBNull": true, + "baseCatalogName": null, + "baseColumnName": null, + "baseSchemaName": null, + "baseServerName": null, + "baseTableName": null, + "columnName": "month", + "columnOrdinal": 2, + "columnSize": 2, + "isAliased": null, + "isAutoIncrement": false, + "isExpression": null, + "isHidden": null, + "isIdentity": false, + "isKey": null, + "isLong": false, + "isReadOnly": false, + "isUnique": false, + "numericPrecision": 5, + "numericScale": 255, + "udtAssemblyQualifiedName": null, + "dataType": "System.Int16, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", + "dataTypeName": "smallint" + }, + { + "isBytes": false, + "isChars": false, + "isSqlVariant": false, + "isUdt": false, + "isXml": false, + "isJson": false, + "sqlDbType": 16, + "isHierarchyId": false, + "isSqlXmlType": false, + "isUnknownType": false, + "isUpdatable": true, + "allowDBNull": true, + "baseCatalogName": null, + "baseColumnName": null, + "baseSchemaName": null, + "baseServerName": null, + "baseTableName": null, + "columnName": "year", + "columnOrdinal": 3, + "columnSize": 2, + "isAliased": null, + "isAutoIncrement": false, + "isExpression": null, + "isHidden": null, + "isIdentity": false, + "isKey": null, + "isLong": false, + "isReadOnly": false, + "isUnique": false, + "numericPrecision": 5, + "numericScale": 255, + "udtAssemblyQualifiedName": null, + "dataType": "System.Int16, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", + "dataTypeName": "smallint" + }, + { + "isBytes": false, + "isChars": false, + "isSqlVariant": false, + "isUdt": false, + "isXml": false, + "isJson": false, + "sqlDbType": 16, + "isHierarchyId": false, + "isSqlXmlType": false, + "isUnknownType": false, + "isUpdatable": true, + "allowDBNull": true, + "baseCatalogName": null, + "baseColumnName": null, + "baseSchemaName": null, + "baseServerName": null, + "baseTableName": null, + "columnName": "cases", + "columnOrdinal": 4, + "columnSize": 2, + "isAliased": null, + "isAutoIncrement": false, + "isExpression": null, + "isHidden": null, + "isIdentity": false, + "isKey": null, + "isLong": false, + "isReadOnly": false, + "isUnique": false, + "numericPrecision": 5, + "numericScale": 255, + "udtAssemblyQualifiedName": null, + "dataType": "System.Int16, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", + "dataTypeName": "smallint" + }, + { + "isBytes": false, + "isChars": false, + "isSqlVariant": false, + "isUdt": false, + "isXml": false, + "isJson": false, + "sqlDbType": 16, + "isHierarchyId": false, + "isSqlXmlType": false, + "isUnknownType": false, + "isUpdatable": true, + "allowDBNull": true, + "baseCatalogName": null, + "baseColumnName": null, + "baseSchemaName": null, + "baseServerName": null, + "baseTableName": null, + "columnName": "deaths", + "columnOrdinal": 5, + "columnSize": 2, + "isAliased": null, + "isAutoIncrement": false, + "isExpression": null, + "isHidden": null, + "isIdentity": false, + "isKey": null, + "isLong": false, + "isReadOnly": false, + "isUnique": false, + "numericPrecision": 5, + "numericScale": 255, + "udtAssemblyQualifiedName": null, + "dataType": "System.Int16, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", + "dataTypeName": "smallint" + }, + { + "isBytes": false, + "isChars": true, + "isSqlVariant": false, + "isUdt": false, + "isXml": false, + "isJson": false, + "sqlDbType": 22, + "isHierarchyId": false, + "isSqlXmlType": false, + "isUnknownType": false, + "isUpdatable": true, + "allowDBNull": true, + "baseCatalogName": null, + "baseColumnName": null, + "baseSchemaName": null, + "baseServerName": null, + "baseTableName": null, + "columnName": "countries_and_territories", + "columnOrdinal": 6, + "columnSize": 8000, + "isAliased": null, + "isAutoIncrement": false, + "isExpression": null, + "isHidden": null, + "isIdentity": false, + "isKey": null, + "isLong": false, + "isReadOnly": false, + "isUnique": false, + "numericPrecision": 255, + "numericScale": 255, + "udtAssemblyQualifiedName": null, + "dataType": "System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", + "dataTypeName": "varchar" + }, + { + "isBytes": false, + "isChars": true, + "isSqlVariant": false, + "isUdt": false, + "isXml": false, + "isJson": false, + "sqlDbType": 22, + "isHierarchyId": false, + "isSqlXmlType": false, + "isUnknownType": false, + "isUpdatable": true, + "allowDBNull": true, + "baseCatalogName": null, + "baseColumnName": null, + "baseSchemaName": null, + "baseServerName": null, + "baseTableName": null, + "columnName": "geo_id", + "columnOrdinal": 7, + "columnSize": 8000, + "isAliased": null, + "isAutoIncrement": false, + "isExpression": null, + "isHidden": null, + "isIdentity": false, + "isKey": null, + "isLong": false, + "isReadOnly": false, + "isUnique": false, + "numericPrecision": 255, + "numericScale": 255, + "udtAssemblyQualifiedName": null, + "dataType": "System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", + "dataTypeName": "varchar" + }, + { + "isBytes": false, + "isChars": true, + "isSqlVariant": false, + "isUdt": false, + "isXml": false, + "isJson": false, + "sqlDbType": 22, + "isHierarchyId": false, + "isSqlXmlType": false, + "isUnknownType": false, + "isUpdatable": true, + "allowDBNull": true, + "baseCatalogName": null, + "baseColumnName": null, + "baseSchemaName": null, + "baseServerName": null, + "baseTableName": null, + "columnName": "country_territory_code", + "columnOrdinal": 8, + "columnSize": 8000, + "isAliased": null, + "isAutoIncrement": false, + "isExpression": null, + "isHidden": null, + "isIdentity": false, + "isKey": null, + "isLong": false, + "isReadOnly": false, + "isUnique": false, + "numericPrecision": 255, + "numericScale": 255, + "udtAssemblyQualifiedName": null, + "dataType": "System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", + "dataTypeName": "varchar" + }, + { + "isBytes": false, + "isChars": false, + "isSqlVariant": false, + "isUdt": false, + "isXml": false, + "isJson": false, + "sqlDbType": 8, + "isHierarchyId": false, + "isSqlXmlType": false, + "isUnknownType": false, + "isUpdatable": true, + "allowDBNull": true, + "baseCatalogName": null, + "baseColumnName": null, + "baseSchemaName": null, + "baseServerName": null, + "baseTableName": null, + "columnName": "pop_data_2018", + "columnOrdinal": 9, + "columnSize": 4, + "isAliased": null, + "isAutoIncrement": false, + "isExpression": null, + "isHidden": null, + "isIdentity": false, + "isKey": null, + "isLong": false, + "isReadOnly": false, + "isUnique": false, + "numericPrecision": 10, + "numericScale": 255, + "udtAssemblyQualifiedName": null, + "dataType": "System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", + "dataTypeName": "int" + }, + { + "isBytes": false, + "isChars": true, + "isSqlVariant": false, + "isUdt": false, + "isXml": false, + "isJson": false, + "sqlDbType": 22, + "isHierarchyId": false, + "isSqlXmlType": false, + "isUnknownType": false, + "isUpdatable": true, + "allowDBNull": true, + "baseCatalogName": null, + "baseColumnName": null, + "baseSchemaName": null, + "baseServerName": null, + "baseTableName": null, + "columnName": "continent_exp", + "columnOrdinal": 10, + "columnSize": 8000, + "isAliased": null, + "isAutoIncrement": false, + "isExpression": null, + "isHidden": null, + "isIdentity": false, + "isKey": null, + "isLong": false, + "isReadOnly": false, + "isUnique": false, + "numericPrecision": 255, + "numericScale": 255, + "udtAssemblyQualifiedName": null, + "dataType": "System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", + "dataTypeName": "varchar" + }, + { + "isBytes": false, + "isChars": false, + "isSqlVariant": false, + "isUdt": false, + "isXml": false, + "isJson": false, + "sqlDbType": 33, + "isHierarchyId": false, + "isSqlXmlType": false, + "isUnknownType": false, + "isUpdatable": true, + "allowDBNull": true, + "baseCatalogName": null, + "baseColumnName": null, + "baseSchemaName": null, + "baseServerName": null, + "baseTableName": null, + "columnName": "load_date", + "columnOrdinal": 11, + "columnSize": 6, + "isAliased": null, + "isAutoIncrement": false, + "isExpression": null, + "isHidden": null, + "isIdentity": false, + "isKey": null, + "isLong": false, + "isReadOnly": false, + "isUnique": false, + "numericPrecision": 255, + "numericScale": 0, + "udtAssemblyQualifiedName": null, + "dataType": "System.DateTime, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", + "dataTypeName": "datetime2" + }, + { + "isBytes": false, + "isChars": true, + "isSqlVariant": false, + "isUdt": false, + "isXml": false, + "isJson": false, + "sqlDbType": 22, + "isHierarchyId": false, + "isSqlXmlType": false, + "isUnknownType": false, + "isUpdatable": true, + "allowDBNull": true, + "baseCatalogName": null, + "baseColumnName": null, + "baseSchemaName": null, + "baseServerName": null, + "baseTableName": null, + "columnName": "iso_country", + "columnOrdinal": 12, + "columnSize": 8000, + "isAliased": null, + "isAutoIncrement": false, + "isExpression": null, + "isHidden": null, + "isIdentity": false, + "isKey": null, + "isLong": false, + "isReadOnly": false, + "isUnique": false, + "numericPrecision": 255, + "numericScale": 255, + "udtAssemblyQualifiedName": null, + "dataType": "System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", + "dataTypeName": "varchar" + } + ], + "specialAction": { + "none": true, + "expectYukonXMLShowPlan": false + } + } + }, + "execution_count": 7, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "date_rep" + }, + { + "name": "day" + }, + { + "name": "month" + }, + { + "name": "year" + }, + { + "name": "cases" + }, + { + "name": "deaths" + }, + { + "name": "countries_and_territories" + }, + { + "name": "geo_id" + }, + { + "name": "country_territory_code" + }, + { + "name": "pop_data_2018" + }, + { + "name": "continent_exp" + }, + { + "name": "load_date" + }, + { + "name": "iso_country" + } + ] + }, + "data": [ + { + "0": "2020-12-14", + "1": "14", + "2": "12", + "3": "2020", + "4": "746", + "5": "6", + "6": "Afghanistan", + "7": "AF", + "8": "AFG", + "9": "NULL", + "10": "Asia", + "11": "2021-05-11 00:07:13", + "12": "AF" + }, + { + "0": "2020-12-13", + "1": "13", + "2": "12", + "3": "2020", + "4": "298", + "5": "9", + "6": "Afghanistan", + "7": "AF", + "8": "AFG", + "9": "NULL", + "10": "Asia", + "11": "2021-05-11 00:07:13", + "12": "AF" + }, + { + "0": "2020-12-12", + "1": "12", + "2": "12", + "3": "2020", + "4": "113", + "5": "11", + "6": "Afghanistan", + "7": "AF", + "8": "AFG", + "9": "NULL", + "10": "Asia", + "11": "2021-05-11 00:07:13", + "12": "AF" + }, + { + "0": "2020-12-11", + "1": "11", + "2": "12", + "3": "2020", + "4": "63", + "5": "10", + "6": "Afghanistan", + "7": "AF", + "8": "AFG", + "9": "NULL", + "10": "Asia", + "11": "2021-05-11 00:07:13", + "12": "AF" + }, + { + "0": "2020-12-10", + "1": "10", + "2": "12", + "3": "2020", + "4": "202", + "5": "16", + "6": "Afghanistan", + "7": "AF", + "8": "AFG", + "9": "NULL", + "10": "Asia", + "11": "2021-05-11 00:07:13", + "12": "AF" + }, + { + "0": "2020-12-09", + "1": "9", + "2": "12", + "3": "2020", + "4": "135", + "5": "13", + "6": "Afghanistan", + "7": "AF", + "8": "AFG", + "9": "NULL", + "10": "Asia", + "11": "2021-05-11 00:07:13", + "12": "AF" + }, + { + "0": "2020-12-08", + "1": "8", + "2": "12", + "3": "2020", + "4": "200", + "5": "6", + "6": "Afghanistan", + "7": "AF", + "8": "AFG", + "9": "NULL", + "10": "Asia", + "11": "2021-05-11 00:07:13", + "12": "AF" + }, + { + "0": "2020-12-07", + "1": "7", + "2": "12", + "3": "2020", + "4": "210", + "5": "26", + "6": "Afghanistan", + "7": "AF", + "8": "AFG", + "9": "NULL", + "10": "Asia", + "11": "2021-05-11 00:07:13", + "12": "AF" + }, + { + "0": "2020-12-06", + "1": "6", + "2": "12", + "3": "2020", + "4": "234", + "5": "10", + "6": "Afghanistan", + "7": "AF", + "8": "AFG", + "9": "NULL", + "10": "Asia", + "11": "2021-05-11 00:07:13", + "12": "AF" + }, + { + "0": "2020-12-05", + "1": "5", + "2": "12", + "3": "2020", + "4": "235", + "5": "18", + "6": "Afghanistan", + "7": "AF", + "8": "AFG", + "9": "NULL", + "10": "Asia", + "11": "2021-05-11 00:07:13", + "12": "AF" + } + ] + }, + "text/html": [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "
date_repdaymonthyearcasesdeathscountries_and_territoriesgeo_idcountry_territory_codepop_data_2018continent_expload_dateiso_country
2020-12-14141220207466AfghanistanAFAFGNULLAsia2021-05-11 00:07:13AF
2020-12-13131220202989AfghanistanAFAFGNULLAsia2021-05-11 00:07:13AF
2020-12-121212202011311AfghanistanAFAFGNULLAsia2021-05-11 00:07:13AF
2020-12-11111220206310AfghanistanAFAFGNULLAsia2021-05-11 00:07:13AF
2020-12-101012202020216AfghanistanAFAFGNULLAsia2021-05-11 00:07:13AF
2020-12-09912202013513AfghanistanAFAFGNULLAsia2021-05-11 00:07:13AF
2020-12-0881220202006AfghanistanAFAFGNULLAsia2021-05-11 00:07:13AF
2020-12-07712202021026AfghanistanAFAFGNULLAsia2021-05-11 00:07:13AF
2020-12-06612202023410AfghanistanAFAFGNULLAsia2021-05-11 00:07:13AF
2020-12-05512202023518AfghanistanAFAFGNULLAsia2021-05-11 00:07:13AF
" + ] + } + } + ], + "execution_count": 7 + }, + { + "cell_type": "markdown", + "source": [ + "## Data source usage\n", + "\n", + "Previous example uses full path to the file. As an alternative, you can create an external data source with the location that points to the root folder of the storage, and use that data source and the relative path to the file in `OPENROWSET` function.\n", + "\n", + "First you need to create `EXTERNAL DATA SOURCE` in some database:" + ], + "metadata": { + "azdata_cell_guid": "a373fa76-bfdf-4bb6-8098-73c9ef436eb8" + } + }, + { + "cell_type": "code", + "source": [ + "create external data source DeltaLakeStorage\r\n", + "with ( location = 'https://sqlondemandstorage.blob.core.windows.net/delta-lake/' );" + ], + "metadata": { + "azdata_cell_guid": "48b6ee55-09ec-47df-bea5-707dc2f42aa8" + }, + "outputs": [], + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Make sure that you create `EXTERNAL DATA SOURCE` in database other than `master`. If data source is protected with some credential you might need to create credential that is associated to data source.\r\n", + "\r\n", + "Once you have properly configures data source, you can use it in `OPENROWSET` function:" + ], + "metadata": { + "azdata_cell_guid": "4e487b5a-657a-4c2d-b24c-d9c755d27e4c" + } + }, + { + "cell_type": "code", + "source": [ + "select top 10 *\r\n", + "from openrowset(\r\n", + " bulk 'covid',\r\n", + " data_source = 'DeltaLakeStorage',\r\n", + " format = 'delta'\r\n", + " ) as rows" + ], + "metadata": { + "azdata_cell_guid": "6ab5dd60-2dfe-4c19-a390-0c1505b0bde9" + }, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/html": "Statement ID: {541C6B53-20E8-4B96-8EAD-B2CC3C6025F2} | Query hash: 0x2607A6E4C1BCC82C | Distributed request ID: {FEE63FA3-871C-4E0E-83C4-B5587C2AF801}. Total size of data scanned is 1 megabytes, total size of data moved is 1 megabytes, total size of data written is 0 megabytes." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "(10 rows affected)" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:02.790" + }, + "metadata": {} + }, + { + "output_type": "execute_result", + "metadata": { + "resultSet": { + "id": 0, + "batchId": 0, + "rowCount": 10, + "complete": true, + "columnInfo": [ + { + "isBytes": false, + "isChars": false, + "isSqlVariant": false, + "isUdt": false, + "isXml": false, + "isJson": false, + "sqlDbType": 31, + "isHierarchyId": false, + "isSqlXmlType": false, + "isUnknownType": false, + "isUpdatable": true, + "allowDBNull": true, + "baseCatalogName": null, + "baseColumnName": null, + "baseSchemaName": null, + "baseServerName": null, + "baseTableName": null, + "columnName": "date_rep", + "columnOrdinal": 0, + "columnSize": 3, + "isAliased": null, + "isAutoIncrement": false, + "isExpression": null, + "isHidden": null, + "isIdentity": false, + "isKey": null, + "isLong": false, + "isReadOnly": false, + "isUnique": false, + "numericPrecision": 255, + "numericScale": 255, + "udtAssemblyQualifiedName": null, + "dataType": "System.DateTime, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", + "dataTypeName": "date" + }, + { + "isBytes": false, + "isChars": false, + "isSqlVariant": false, + "isUdt": false, + "isXml": false, + "isJson": false, + "sqlDbType": 16, + "isHierarchyId": false, + "isSqlXmlType": false, + "isUnknownType": false, + "isUpdatable": true, + "allowDBNull": true, + "baseCatalogName": null, + "baseColumnName": null, + "baseSchemaName": null, + "baseServerName": null, + "baseTableName": null, + "columnName": "day", + "columnOrdinal": 1, + "columnSize": 2, + "isAliased": null, + "isAutoIncrement": false, + "isExpression": null, + "isHidden": null, + "isIdentity": false, + "isKey": null, + "isLong": false, + "isReadOnly": false, + "isUnique": false, + "numericPrecision": 5, + "numericScale": 255, + "udtAssemblyQualifiedName": null, + "dataType": "System.Int16, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", + "dataTypeName": "smallint" + }, + { + "isBytes": false, + "isChars": false, + "isSqlVariant": false, + "isUdt": false, + "isXml": false, + "isJson": false, + "sqlDbType": 16, + "isHierarchyId": false, + "isSqlXmlType": false, + "isUnknownType": false, + "isUpdatable": true, + "allowDBNull": true, + "baseCatalogName": null, + "baseColumnName": null, + "baseSchemaName": null, + "baseServerName": null, + "baseTableName": null, + "columnName": "month", + "columnOrdinal": 2, + "columnSize": 2, + "isAliased": null, + "isAutoIncrement": false, + "isExpression": null, + "isHidden": null, + "isIdentity": false, + "isKey": null, + "isLong": false, + "isReadOnly": false, + "isUnique": false, + "numericPrecision": 5, + "numericScale": 255, + "udtAssemblyQualifiedName": null, + "dataType": "System.Int16, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", + "dataTypeName": "smallint" + }, + { + "isBytes": false, + "isChars": false, + "isSqlVariant": false, + "isUdt": false, + "isXml": false, + "isJson": false, + "sqlDbType": 16, + "isHierarchyId": false, + "isSqlXmlType": false, + "isUnknownType": false, + "isUpdatable": true, + "allowDBNull": true, + "baseCatalogName": null, + "baseColumnName": null, + "baseSchemaName": null, + "baseServerName": null, + "baseTableName": null, + "columnName": "year", + "columnOrdinal": 3, + "columnSize": 2, + "isAliased": null, + "isAutoIncrement": false, + "isExpression": null, + "isHidden": null, + "isIdentity": false, + "isKey": null, + "isLong": false, + "isReadOnly": false, + "isUnique": false, + "numericPrecision": 5, + "numericScale": 255, + "udtAssemblyQualifiedName": null, + "dataType": "System.Int16, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", + "dataTypeName": "smallint" + }, + { + "isBytes": false, + "isChars": false, + "isSqlVariant": false, + "isUdt": false, + "isXml": false, + "isJson": false, + "sqlDbType": 16, + "isHierarchyId": false, + "isSqlXmlType": false, + "isUnknownType": false, + "isUpdatable": true, + "allowDBNull": true, + "baseCatalogName": null, + "baseColumnName": null, + "baseSchemaName": null, + "baseServerName": null, + "baseTableName": null, + "columnName": "cases", + "columnOrdinal": 4, + "columnSize": 2, + "isAliased": null, + "isAutoIncrement": false, + "isExpression": null, + "isHidden": null, + "isIdentity": false, + "isKey": null, + "isLong": false, + "isReadOnly": false, + "isUnique": false, + "numericPrecision": 5, + "numericScale": 255, + "udtAssemblyQualifiedName": null, + "dataType": "System.Int16, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", + "dataTypeName": "smallint" + }, + { + "isBytes": false, + "isChars": false, + "isSqlVariant": false, + "isUdt": false, + "isXml": false, + "isJson": false, + "sqlDbType": 16, + "isHierarchyId": false, + "isSqlXmlType": false, + "isUnknownType": false, + "isUpdatable": true, + "allowDBNull": true, + "baseCatalogName": null, + "baseColumnName": null, + "baseSchemaName": null, + "baseServerName": null, + "baseTableName": null, + "columnName": "deaths", + "columnOrdinal": 5, + "columnSize": 2, + "isAliased": null, + "isAutoIncrement": false, + "isExpression": null, + "isHidden": null, + "isIdentity": false, + "isKey": null, + "isLong": false, + "isReadOnly": false, + "isUnique": false, + "numericPrecision": 5, + "numericScale": 255, + "udtAssemblyQualifiedName": null, + "dataType": "System.Int16, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", + "dataTypeName": "smallint" + }, + { + "isBytes": false, + "isChars": true, + "isSqlVariant": false, + "isUdt": false, + "isXml": false, + "isJson": false, + "sqlDbType": 22, + "isHierarchyId": false, + "isSqlXmlType": false, + "isUnknownType": false, + "isUpdatable": true, + "allowDBNull": true, + "baseCatalogName": null, + "baseColumnName": null, + "baseSchemaName": null, + "baseServerName": null, + "baseTableName": null, + "columnName": "countries_and_territories", + "columnOrdinal": 6, + "columnSize": 8000, + "isAliased": null, + "isAutoIncrement": false, + "isExpression": null, + "isHidden": null, + "isIdentity": false, + "isKey": null, + "isLong": false, + "isReadOnly": false, + "isUnique": false, + "numericPrecision": 255, + "numericScale": 255, + "udtAssemblyQualifiedName": null, + "dataType": "System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", + "dataTypeName": "varchar" + }, + { + "isBytes": false, + "isChars": true, + "isSqlVariant": false, + "isUdt": false, + "isXml": false, + "isJson": false, + "sqlDbType": 22, + "isHierarchyId": false, + "isSqlXmlType": false, + "isUnknownType": false, + "isUpdatable": true, + "allowDBNull": true, + "baseCatalogName": null, + "baseColumnName": null, + "baseSchemaName": null, + "baseServerName": null, + "baseTableName": null, + "columnName": "geo_id", + "columnOrdinal": 7, + "columnSize": 8000, + "isAliased": null, + "isAutoIncrement": false, + "isExpression": null, + "isHidden": null, + "isIdentity": false, + "isKey": null, + "isLong": false, + "isReadOnly": false, + "isUnique": false, + "numericPrecision": 255, + "numericScale": 255, + "udtAssemblyQualifiedName": null, + "dataType": "System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", + "dataTypeName": "varchar" + }, + { + "isBytes": false, + "isChars": true, + "isSqlVariant": false, + "isUdt": false, + "isXml": false, + "isJson": false, + "sqlDbType": 22, + "isHierarchyId": false, + "isSqlXmlType": false, + "isUnknownType": false, + "isUpdatable": true, + "allowDBNull": true, + "baseCatalogName": null, + "baseColumnName": null, + "baseSchemaName": null, + "baseServerName": null, + "baseTableName": null, + "columnName": "country_territory_code", + "columnOrdinal": 8, + "columnSize": 8000, + "isAliased": null, + "isAutoIncrement": false, + "isExpression": null, + "isHidden": null, + "isIdentity": false, + "isKey": null, + "isLong": false, + "isReadOnly": false, + "isUnique": false, + "numericPrecision": 255, + "numericScale": 255, + "udtAssemblyQualifiedName": null, + "dataType": "System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", + "dataTypeName": "varchar" + }, + { + "isBytes": false, + "isChars": false, + "isSqlVariant": false, + "isUdt": false, + "isXml": false, + "isJson": false, + "sqlDbType": 8, + "isHierarchyId": false, + "isSqlXmlType": false, + "isUnknownType": false, + "isUpdatable": true, + "allowDBNull": true, + "baseCatalogName": null, + "baseColumnName": null, + "baseSchemaName": null, + "baseServerName": null, + "baseTableName": null, + "columnName": "pop_data_2018", + "columnOrdinal": 9, + "columnSize": 4, + "isAliased": null, + "isAutoIncrement": false, + "isExpression": null, + "isHidden": null, + "isIdentity": false, + "isKey": null, + "isLong": false, + "isReadOnly": false, + "isUnique": false, + "numericPrecision": 10, + "numericScale": 255, + "udtAssemblyQualifiedName": null, + "dataType": "System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", + "dataTypeName": "int" + }, + { + "isBytes": false, + "isChars": true, + "isSqlVariant": false, + "isUdt": false, + "isXml": false, + "isJson": false, + "sqlDbType": 22, + "isHierarchyId": false, + "isSqlXmlType": false, + "isUnknownType": false, + "isUpdatable": true, + "allowDBNull": true, + "baseCatalogName": null, + "baseColumnName": null, + "baseSchemaName": null, + "baseServerName": null, + "baseTableName": null, + "columnName": "continent_exp", + "columnOrdinal": 10, + "columnSize": 8000, + "isAliased": null, + "isAutoIncrement": false, + "isExpression": null, + "isHidden": null, + "isIdentity": false, + "isKey": null, + "isLong": false, + "isReadOnly": false, + "isUnique": false, + "numericPrecision": 255, + "numericScale": 255, + "udtAssemblyQualifiedName": null, + "dataType": "System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", + "dataTypeName": "varchar" + }, + { + "isBytes": false, + "isChars": false, + "isSqlVariant": false, + "isUdt": false, + "isXml": false, + "isJson": false, + "sqlDbType": 33, + "isHierarchyId": false, + "isSqlXmlType": false, + "isUnknownType": false, + "isUpdatable": true, + "allowDBNull": true, + "baseCatalogName": null, + "baseColumnName": null, + "baseSchemaName": null, + "baseServerName": null, + "baseTableName": null, + "columnName": "load_date", + "columnOrdinal": 11, + "columnSize": 6, + "isAliased": null, + "isAutoIncrement": false, + "isExpression": null, + "isHidden": null, + "isIdentity": false, + "isKey": null, + "isLong": false, + "isReadOnly": false, + "isUnique": false, + "numericPrecision": 255, + "numericScale": 0, + "udtAssemblyQualifiedName": null, + "dataType": "System.DateTime, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", + "dataTypeName": "datetime2" + }, + { + "isBytes": false, + "isChars": true, + "isSqlVariant": false, + "isUdt": false, + "isXml": false, + "isJson": false, + "sqlDbType": 22, + "isHierarchyId": false, + "isSqlXmlType": false, + "isUnknownType": false, + "isUpdatable": true, + "allowDBNull": true, + "baseCatalogName": null, + "baseColumnName": null, + "baseSchemaName": null, + "baseServerName": null, + "baseTableName": null, + "columnName": "iso_country", + "columnOrdinal": 12, + "columnSize": 8000, + "isAliased": null, + "isAutoIncrement": false, + "isExpression": null, + "isHidden": null, + "isIdentity": false, + "isKey": null, + "isLong": false, + "isReadOnly": false, + "isUnique": false, + "numericPrecision": 255, + "numericScale": 255, + "udtAssemblyQualifiedName": null, + "dataType": "System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", + "dataTypeName": "varchar" + } + ], + "specialAction": { + "none": true, + "expectYukonXMLShowPlan": false + } + } + }, + "execution_count": 5, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "date_rep" + }, + { + "name": "day" + }, + { + "name": "month" + }, + { + "name": "year" + }, + { + "name": "cases" + }, + { + "name": "deaths" + }, + { + "name": "countries_and_territories" + }, + { + "name": "geo_id" + }, + { + "name": "country_territory_code" + }, + { + "name": "pop_data_2018" + }, + { + "name": "continent_exp" + }, + { + "name": "load_date" + }, + { + "name": "iso_country" + } + ] + }, + "data": [ + { + "0": "2020-12-14", + "1": "14", + "2": "12", + "3": "2020", + "4": "746", + "5": "6", + "6": "Afghanistan", + "7": "AF", + "8": "AFG", + "9": "NULL", + "10": "Asia", + "11": "2021-05-11 00:07:13", + "12": "AF" + }, + { + "0": "2020-12-13", + "1": "13", + "2": "12", + "3": "2020", + "4": "298", + "5": "9", + "6": "Afghanistan", + "7": "AF", + "8": "AFG", + "9": "NULL", + "10": "Asia", + "11": "2021-05-11 00:07:13", + "12": "AF" + }, + { + "0": "2020-12-12", + "1": "12", + "2": "12", + "3": "2020", + "4": "113", + "5": "11", + "6": "Afghanistan", + "7": "AF", + "8": "AFG", + "9": "NULL", + "10": "Asia", + "11": "2021-05-11 00:07:13", + "12": "AF" + }, + { + "0": "2020-12-11", + "1": "11", + "2": "12", + "3": "2020", + "4": "63", + "5": "10", + "6": "Afghanistan", + "7": "AF", + "8": "AFG", + "9": "NULL", + "10": "Asia", + "11": "2021-05-11 00:07:13", + "12": "AF" + }, + { + "0": "2020-12-10", + "1": "10", + "2": "12", + "3": "2020", + "4": "202", + "5": "16", + "6": "Afghanistan", + "7": "AF", + "8": "AFG", + "9": "NULL", + "10": "Asia", + "11": "2021-05-11 00:07:13", + "12": "AF" + }, + { + "0": "2020-12-09", + "1": "9", + "2": "12", + "3": "2020", + "4": "135", + "5": "13", + "6": "Afghanistan", + "7": "AF", + "8": "AFG", + "9": "NULL", + "10": "Asia", + "11": "2021-05-11 00:07:13", + "12": "AF" + }, + { + "0": "2020-12-08", + "1": "8", + "2": "12", + "3": "2020", + "4": "200", + "5": "6", + "6": "Afghanistan", + "7": "AF", + "8": "AFG", + "9": "NULL", + "10": "Asia", + "11": "2021-05-11 00:07:13", + "12": "AF" + }, + { + "0": "2020-12-07", + "1": "7", + "2": "12", + "3": "2020", + "4": "210", + "5": "26", + "6": "Afghanistan", + "7": "AF", + "8": "AFG", + "9": "NULL", + "10": "Asia", + "11": "2021-05-11 00:07:13", + "12": "AF" + }, + { + "0": "2020-12-06", + "1": "6", + "2": "12", + "3": "2020", + "4": "234", + "5": "10", + "6": "Afghanistan", + "7": "AF", + "8": "AFG", + "9": "NULL", + "10": "Asia", + "11": "2021-05-11 00:07:13", + "12": "AF" + }, + { + "0": "2020-12-05", + "1": "5", + "2": "12", + "3": "2020", + "4": "235", + "5": "18", + "6": "Afghanistan", + "7": "AF", + "8": "AFG", + "9": "NULL", + "10": "Asia", + "11": "2021-05-11 00:07:13", + "12": "AF" + } + ] + }, + "text/html": [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "
date_repdaymonthyearcasesdeathscountries_and_territoriesgeo_idcountry_territory_codepop_data_2018continent_expload_dateiso_country
2020-12-14141220207466AfghanistanAFAFGNULLAsia2021-05-11 00:07:13AF
2020-12-13131220202989AfghanistanAFAFGNULLAsia2021-05-11 00:07:13AF
2020-12-121212202011311AfghanistanAFAFGNULLAsia2021-05-11 00:07:13AF
2020-12-11111220206310AfghanistanAFAFGNULLAsia2021-05-11 00:07:13AF
2020-12-101012202020216AfghanistanAFAFGNULLAsia2021-05-11 00:07:13AF
2020-12-09912202013513AfghanistanAFAFGNULLAsia2021-05-11 00:07:13AF
2020-12-0881220202006AfghanistanAFAFGNULLAsia2021-05-11 00:07:13AF
2020-12-07712202021026AfghanistanAFAFGNULLAsia2021-05-11 00:07:13AF
2020-12-06612202023410AfghanistanAFAFGNULLAsia2021-05-11 00:07:13AF
2020-12-05512202023518AfghanistanAFAFGNULLAsia2021-05-11 00:07:13AF
" + ] + } + } + ], + "execution_count": 5 + }, + { + "cell_type": "markdown", + "source": [ + "## Explicitly specify schema\n", + "\n", + "The `OPENROWSET` function enables you to explicitly specify what are the types of the columns that you want to read from the file using `WITH` clause:" + ], + "metadata": { + "azdata_cell_guid": "c4145b77-8663-4e59-914b-721955a02635" + } + }, + { + "cell_type": "code", + "source": [ + "select top 10 *\r\n", + "from openrowset(\r\n", + " bulk 'covid',\r\n", + " data_source = 'DeltaLakeStorage',\r\n", + " format = 'delta'\r\n", + " )\r\n", + " with ( date_rep date,\r\n", + " cases int,\r\n", + " geo_id varchar(6)\r\n", + " ) as rows" + ], + "metadata": { + "azdata_cell_guid": "f3da158c-c168-45b0-8e38-7ee2d430420f" + }, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/html": "Statement ID: {095034CD-EC65-4F33-A714-2A3E8FD551F8} | Query hash: 0x72CAC9F6D331E65C | Distributed request ID: {1353D55C-894D-44CE-BCA8-0926313CD889}. Total size of data scanned is 1 megabytes, total size of data moved is 1 megabytes, total size of data written is 0 megabytes." + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "(10 rows affected)" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/html": "Total execution time: 00:00:01.915" + }, + "metadata": {} + }, + { + "output_type": "execute_result", + "metadata": { + "resultSet": { + "id": 0, + "batchId": 0, + "rowCount": 10, + "complete": true, + "columnInfo": [ + { + "isBytes": false, + "isChars": false, + "isSqlVariant": false, + "isUdt": false, + "isXml": false, + "isJson": false, + "sqlDbType": 31, + "isHierarchyId": false, + "isSqlXmlType": false, + "isUnknownType": false, + "isUpdatable": true, + "allowDBNull": true, + "baseCatalogName": null, + "baseColumnName": null, + "baseSchemaName": null, + "baseServerName": null, + "baseTableName": null, + "columnName": "date_rep", + "columnOrdinal": 0, + "columnSize": 3, + "isAliased": null, + "isAutoIncrement": false, + "isExpression": null, + "isHidden": null, + "isIdentity": false, + "isKey": null, + "isLong": false, + "isReadOnly": false, + "isUnique": false, + "numericPrecision": 255, + "numericScale": 255, + "udtAssemblyQualifiedName": null, + "dataType": "System.DateTime, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", + "dataTypeName": "date" + }, + { + "isBytes": false, + "isChars": false, + "isSqlVariant": false, + "isUdt": false, + "isXml": false, + "isJson": false, + "sqlDbType": 8, + "isHierarchyId": false, + "isSqlXmlType": false, + "isUnknownType": false, + "isUpdatable": true, + "allowDBNull": true, + "baseCatalogName": null, + "baseColumnName": null, + "baseSchemaName": null, + "baseServerName": null, + "baseTableName": null, + "columnName": "cases", + "columnOrdinal": 1, + "columnSize": 4, + "isAliased": null, + "isAutoIncrement": false, + "isExpression": null, + "isHidden": null, + "isIdentity": false, + "isKey": null, + "isLong": false, + "isReadOnly": false, + "isUnique": false, + "numericPrecision": 10, + "numericScale": 255, + "udtAssemblyQualifiedName": null, + "dataType": "System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", + "dataTypeName": "int" + }, + { + "isBytes": false, + "isChars": true, + "isSqlVariant": false, + "isUdt": false, + "isXml": false, + "isJson": false, + "sqlDbType": 22, + "isHierarchyId": false, + "isSqlXmlType": false, + "isUnknownType": false, + "isUpdatable": true, + "allowDBNull": true, + "baseCatalogName": null, + "baseColumnName": null, + "baseSchemaName": null, + "baseServerName": null, + "baseTableName": null, + "columnName": "geo_id", + "columnOrdinal": 2, + "columnSize": 6, + "isAliased": null, + "isAutoIncrement": false, + "isExpression": null, + "isHidden": null, + "isIdentity": false, + "isKey": null, + "isLong": false, + "isReadOnly": false, + "isUnique": false, + "numericPrecision": 255, + "numericScale": 255, + "udtAssemblyQualifiedName": null, + "dataType": "System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", + "dataTypeName": "varchar" + } + ], + "specialAction": { + "none": true, + "expectYukonXMLShowPlan": false + } + } + }, + "execution_count": 6, + "data": { + "application/vnd.dataresource+json": { + "schema": { + "fields": [ + { + "name": "date_rep" + }, + { + "name": "cases" + }, + { + "name": "geo_id" + } + ] + }, + "data": [ + { + "0": "2020-12-14", + "1": "746", + "2": "AF" + }, + { + "0": "2020-12-13", + "1": "298", + "2": "AF" + }, + { + "0": "2020-12-12", + "1": "113", + "2": "AF" + }, + { + "0": "2020-12-11", + "1": "63", + "2": "AF" + }, + { + "0": "2020-12-10", + "1": "202", + "2": "AF" + }, + { + "0": "2020-12-09", + "1": "135", + "2": "AF" + }, + { + "0": "2020-12-08", + "1": "200", + "2": "AF" + }, + { + "0": "2020-12-07", + "1": "210", + "2": "AF" + }, + { + "0": "2020-12-06", + "1": "234", + "2": "AF" + }, + { + "0": "2020-12-05", + "1": "235", + "2": "AF" + } + ] + }, + "text/html": [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "
date_repcasesgeo_id
2020-12-14746AF
2020-12-13298AF
2020-12-12113AF
2020-12-1163AF
2020-12-10202AF
2020-12-09135AF
2020-12-08200AF
2020-12-07210AF
2020-12-06234AF
2020-12-05235AF
" + ] + } + } + ], + "execution_count": 6 + }, + { + "cell_type": "markdown", + "source": [ + "Delta Lake data types are by default mapped to SQL types. The following table describes how Parquet types are mapped to SQL native types.\n", + "\n", + "| Parquet type | Parquet logical type (annotation) | SQL data type |\n", + "| --- | --- | --- |\n", + "| BOOLEAN | | bit |\n", + "| BINARY / BYTE\\_ARRAY | | varbinary |\n", + "| DOUBLE | | float |\n", + "| FLOAT | | real |\n", + "| INT32 | | int |\n", + "| INT64 | | bigint |\n", + "| INT96 | | datetime2 |\n", + "| FIXED\\_LEN\\_BYTE\\_ARRAY | | binary |\n", + "| BINARY | UTF8 | varchar \\*(UTF8 collation) |\n", + "| BINARY | STRING | varchar \\*(UTF8 collation) |\n", + "| BINARY | ENUM | varchar \\*(UTF8 collation) |\n", + "| BINARY | UUID | uniqueidentifier |\n", + "| BINARY | DECIMAL | decimal |\n", + "| BINARY | JSON | varchar(max) \\*(UTF8 collation) |\n", + "| BINARY | BSON | varbinary(max) |\n", + "| FIXED\\_LEN\\_BYTE\\_ARRAY | DECIMAL | decimal |\n", + "| BYTE\\_ARRAY | INTERVAL | varchar(max), serialized into standardized format |\n", + "| INT32 | INT(8, true) | smallint |\n", + "| INT32 | INT(16, true) | smallint |\n", + "| INT32 | INT(32, true) | int |\n", + "| INT32 | INT(8, false) | tinyint |\n", + "| INT32 | INT(16, false) | int |\n", + "| INT32 | INT(32, false) | bigint |\n", + "| INT32 | DATE | date |\n", + "| INT32 | DECIMAL | decimal |\n", + "| INT32 | TIME (MILLIS ) | time |\n", + "| INT64 | INT(64, true) | bigint |\n", + "| INT64 | INT(64, false ) | decimal(20,0) |\n", + "| INT64 | DECIMAL | decimal |\n", + "| INT64 | TIME (MICROS / NANOS) | time |\n", + "| INT64 | TIMESTAMP (MILLIS / MICROS / NANOS) | datetime2 |\n", + "| [Complex type](https://github.com/apache/parquet-format/blob/master/LogicalTypes.md#lists) | LIST | varchar(max), serialized into JSON |\n", + "| [Complex type](https://github.com/apache/parquet-format/blob/master/LogicalTypes.md#maps) | MAP | varchar(max), serialized into JSON |" + ], + "metadata": { + "azdata_cell_guid": "745b2c81-01eb-4bf5-9cad-47a03dcff194" + } + } + ] +} \ No newline at end of file diff --git a/Notebooks/TSQL/Jupiter/content/quickstarts/img/covid-delta-lake-studio.png b/Notebooks/TSQL/Jupiter/content/quickstarts/img/covid-delta-lake-studio.png new file mode 100644 index 0000000000000000000000000000000000000000..4d79c9761bdeba53add0d67966c924f3fcdf9bbf GIT binary patch literal 91336 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

X4XVZZg3(#x&E)75=3zkp=%M1?MO6iS#bW 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