ARROW-12107: [Rust][DataFusion] Support SELECT * from information_schema.columns - #9840

Closed
alamb wants to merge 5 commits into
apache:masterfrom
alamb:alamn/information_schema_columns
Closed

ARROW-12107: [Rust][DataFusion] Support SELECT * from information_schema.columns#9840
alamb wants to merge 5 commits into
apache:masterfrom
alamb:alamn/information_schema_columns

Conversation

@alamb

@alambalamb commented Mar 29, 2021

Copy link
Copy Markdown
Contributor

Builds on the code in #9818

Rationale

Provide schema metadata access (so a user can see what columns exist and their type).

See the doc for background: https://docs.google.com/document/d/12cpZUSNPqVH9Z0BBx6O8REu7TFqL-NPPAYCUPpDls1k/edit#

I plan to add support for SHOW COLUMNS possibly as a follow on PR (though I have found out that SHOW COLUMNS and SHOW TABLES are not supported by either MySQL or by Postgres 🤔 )

Changes

I chose to add the first 15 columns from information_schema.columns You can see the full list in Postgres here and SQL Server here.

There are a bunch more columns that say "Applies to features not available in PostgreSQL" and that don't apply to DataFusion either-- since my usecase is to get the basic schema information out I chose not to add a bunch of columns that are always null at this time.

I feel the use of column builders here is somewhat awkward (as it requires many calls to unwrap). I am thinking of a follow on PR to refactor this code to use Vec<String> and Vec<u64> and then create StringArray and UInt64Array directly from them but for now I just want the functionality

Example use

Setup:

echo "1,Foo,44.9" > /tmp/table.csv
echo "2,Bar,22.1" >> /tmp/table.csv
cargo run --bin datafusion-cli

Then run :

> CREATE EXTERNAL TABLE t(a int, b varchar, c float)
STORED AS CSV
LOCATION '/tmp/table.csv';
0 rows in set. Query took 0 seconds.
> select table_name, column_name, ordinal_position, is_nullable, data_type from information_schema.columns;
+------------+-------------+------------------+-------------+-----------+
| table_name | column_name | ordinal_position | is_nullable | data_type |
+------------+-------------+------------------+-------------+-----------+
| t | a | 0 | NO | Int32 |
| t | b | 1 | NO | Utf8 |
| t | c | 2 | NO | Float32 |
+------------+-------------+------------------+-------------+-----------+
3 row in set. Query took 0 seconds.

@github-actions

Copy link
Copy Markdown

@alambalamb changed the title ARROW-12107: [Rust][DataFusion] Support SELECT * from information_schema.columnsARROW-12107: [Rust][DataFusion] Support SELECT * from information_schema.columnsMar 30, 2021
@alamb
alambforce-pushed the alamn/information_schema_columns branch from ad1935d to 0a3663bCompareMarch 30, 2021 11:58
@alamb
alamb marked this pull request as ready for review March 30, 2021 11:58

@andygroveandygrove left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm excited to see this. Thanks @alamb

I had a proof-of-concept JDBC driver working against DataFusion at one point. One day I will find time to work on this again. With the information schema support it will really help with making this work with BI tools.

@alamb
alambforce-pushed the alamn/information_schema_columns branch from 0a3663b to ec17d43CompareMarch 31, 2021 17:57
@alamb

Copy link
Copy Markdown
ContributorAuthor

@jorgecarleitaojorgecarleitao left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Thanks a lot, this metadata part is really starting to shine! ✨

Comment on lines 314 to 318

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not it matters much, just more like an FYI: this can cause large binaries as every variation used is compiled individually.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can change it into just taking &str -- though I think in the case since there is just one callsite there is likely to be just one version of the code

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah, it was really just if you had not though about it. No need to change anything imo 👍

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it may be more idiomatic to use Into, or From.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok. Good idea

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In 98f702da90d18d8ae855a5eca6b0d1d6c1809551

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(which I now realize I put into #9866 rather than this PR 🤦 ) -- but it should get in that PR hopefully

@returnStringreturnString left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks great! And selfishly, really happy to see the namespacing stuff being used to power cool new features 😄

@alamb

Copy link
Copy Markdown
ContributorAuthor

Looks great! And selfishly, really happy to see the namespacing stuff being used to power cool new features 😄

@returnString -- the namespacing stuff is pretty cool. I didn't realize how much easier it would make my life when it came in!

@alamb
alambforce-pushed the alamn/information_schema_columns branch from ec17d43 to c18f0aeCompareMarch 31, 2021 21:07
@alambalamb closed this in caa8950Apr 1, 2021
@alamb
alamb deleted the alamn/information_schema_columns branch April 1, 2021 12:00
alamb added a commit that referenced this pull request Apr 6, 2021
# Rationale
Accessing the list of columns via `select * from information_schema.columns` (introduced in #9840) is a lot to type
See the doc for background: https://docs.google.com/document/d/12cpZUSNPqVH9Z0BBx6O8REu7TFqL-NPPAYCUPpDls1k/edit#
This is a sister PR to `SHOW TABLES` here: #9847
# Proposal
Add support for `SHOW COLUMNS FROM <table>` command.
Following the MySQL syntax supported by sqlparser: https://dev.mysql.com/doc/refman/8.0/en/show-columns.html
# Example Use
Setup:
```
echo "1,Foo,44.9" > /tmp/table.csv
echo "2,Bar,22.1" >> /tmp/table.csv
cargo run --bin datafusion-cli
```
Then run :
```
> CREATE EXTERNAL TABLE t(a int, b varchar, c float)
STORED AS CSV
LOCATION '/tmp/table.csv';
0 rows in set. Query took 0 seconds.
> show columns from t;
+---------------+--------------+------------+-------------+-----------+-------------+
| table_catalog | table_schema | table_name | column_name | data_type | is_nullable |
+---------------+--------------+------------+-------------+-----------+-------------+
| datafusion | public | t | a | Int32 | NO |
| datafusion | public | t | b | Utf8 | NO |
| datafusion | public | t | c | Float32 | NO |
+---------------+--------------+------------+-------------+-----------+-------------+
3 row in set. Query took 0 seconds.
```
# Commentary
Note that the identifiers are case sensitive (which is a more general
problem that affects all name resolution, not just `SHOW COLUMNS`). Ideally this should also work:
```
> show columns from T;
Plan("Unknown relation for SHOW COLUMNS: T")
> select * from T;
Plan("Table or CTE with name \'T\' not found")
```
Closes#9866 from alamb/alamb/show_columns
Authored-by: Andrew Lamb <andrew@nerdnetworks.org>
Signed-off-by: Andrew Lamb <andrew@nerdnetworks.org>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@alamb@andygrove@returnString@jorgecarleitao
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

ARROW-12107: [Rust][DataFusion] Support SELECT * from information_schema.columns - #9840

Closed
alamb wants to merge 5 commits into
apache:masterfrom
alamb:alamn/information_schema_columns
Closed

ARROW-12107: [Rust][DataFusion] Support SELECT * from information_schema.columns#9840
alamb wants to merge 5 commits into
apache:masterfrom
alamb:alamn/information_schema_columns

Conversation

@alamb

@alambalamb commented Mar 29, 2021

Copy link
Copy Markdown
Contributor

Builds on the code in #9818

Rationale

Provide schema metadata access (so a user can see what columns exist and their type).

See the doc for background: https://docs.google.com/document/d/12cpZUSNPqVH9Z0BBx6O8REu7TFqL-NPPAYCUPpDls1k/edit#

I plan to add support for SHOW COLUMNS possibly as a follow on PR (though I have found out that SHOW COLUMNS and SHOW TABLES are not supported by either MySQL or by Postgres 🤔 )

Changes

I chose to add the first 15 columns from information_schema.columns You can see the full list in Postgres here and SQL Server here.

There are a bunch more columns that say "Applies to features not available in PostgreSQL" and that don't apply to DataFusion either-- since my usecase is to get the basic schema information out I chose not to add a bunch of columns that are always null at this time.

I feel the use of column builders here is somewhat awkward (as it requires many calls to unwrap). I am thinking of a follow on PR to refactor this code to use Vec<String> and Vec<u64> and then create StringArray and UInt64Array directly from them but for now I just want the functionality

Example use

Setup:

echo "1,Foo,44.9" > /tmp/table.csv
echo "2,Bar,22.1" >> /tmp/table.csv
cargo run --bin datafusion-cli

Then run :

> CREATE EXTERNAL TABLE t(a int, b varchar, c float)
STORED AS CSV
LOCATION '/tmp/table.csv';
0 rows in set. Query took 0 seconds.
> select table_name, column_name, ordinal_position, is_nullable, data_type from information_schema.columns;
+------------+-------------+------------------+-------------+-----------+
| table_name | column_name | ordinal_position | is_nullable | data_type |
+------------+-------------+------------------+-------------+-----------+
| t | a | 0 | NO | Int32 |
| t | b | 1 | NO | Utf8 |
| t | c | 2 | NO | Float32 |
+------------+-------------+------------------+-------------+-----------+
3 row in set. Query took 0 seconds.

@github-actions

Copy link
Copy Markdown

@alambalamb changed the title ARROW-12107: [Rust][DataFusion] Support SELECT * from information_schema.columnsARROW-12107: [Rust][DataFusion] Support SELECT * from information_schema.columnsMar 30, 2021
@alamb
alambforce-pushed the alamn/information_schema_columns branch from ad1935d to 0a3663bCompareMarch 30, 2021 11:58
@alamb
alamb marked this pull request as ready for review March 30, 2021 11:58

@andygroveandygrove left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm excited to see this. Thanks @alamb

I had a proof-of-concept JDBC driver working against DataFusion at one point. One day I will find time to work on this again. With the information schema support it will really help with making this work with BI tools.

@alamb
alambforce-pushed the alamn/information_schema_columns branch from 0a3663b to ec17d43CompareMarch 31, 2021 17:57
@alamb

Copy link
Copy Markdown
ContributorAuthor

@jorgecarleitaojorgecarleitao left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Thanks a lot, this metadata part is really starting to shine! ✨

Comment on lines 314 to 318

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not it matters much, just more like an FYI: this can cause large binaries as every variation used is compiled individually.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can change it into just taking &str -- though I think in the case since there is just one callsite there is likely to be just one version of the code

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah, it was really just if you had not though about it. No need to change anything imo 👍

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it may be more idiomatic to use Into, or From.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok. Good idea

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In 98f702da90d18d8ae855a5eca6b0d1d6c1809551

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(which I now realize I put into #9866 rather than this PR 🤦 ) -- but it should get in that PR hopefully

@returnStringreturnString left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks great! And selfishly, really happy to see the namespacing stuff being used to power cool new features 😄

@alamb

Copy link
Copy Markdown
ContributorAuthor

Looks great! And selfishly, really happy to see the namespacing stuff being used to power cool new features 😄

@returnString -- the namespacing stuff is pretty cool. I didn't realize how much easier it would make my life when it came in!

@alamb
alambforce-pushed the alamn/information_schema_columns branch from ec17d43 to c18f0aeCompareMarch 31, 2021 21:07
@alambalamb closed this in caa8950Apr 1, 2021
@alamb
alamb deleted the alamn/information_schema_columns branch April 1, 2021 12:00
alamb added a commit that referenced this pull request Apr 6, 2021
# Rationale
Accessing the list of columns via `select * from information_schema.columns` (introduced in #9840) is a lot to type
See the doc for background: https://docs.google.com/document/d/12cpZUSNPqVH9Z0BBx6O8REu7TFqL-NPPAYCUPpDls1k/edit#
This is a sister PR to `SHOW TABLES` here: #9847
# Proposal
Add support for `SHOW COLUMNS FROM <table>` command.
Following the MySQL syntax supported by sqlparser: https://dev.mysql.com/doc/refman/8.0/en/show-columns.html
# Example Use
Setup:
```
echo "1,Foo,44.9" > /tmp/table.csv
echo "2,Bar,22.1" >> /tmp/table.csv
cargo run --bin datafusion-cli
```
Then run :
```
> CREATE EXTERNAL TABLE t(a int, b varchar, c float)
STORED AS CSV
LOCATION '/tmp/table.csv';
0 rows in set. Query took 0 seconds.
> show columns from t;
+---------------+--------------+------------+-------------+-----------+-------------+
| table_catalog | table_schema | table_name | column_name | data_type | is_nullable |
+---------------+--------------+------------+-------------+-----------+-------------+
| datafusion | public | t | a | Int32 | NO |
| datafusion | public | t | b | Utf8 | NO |
| datafusion | public | t | c | Float32 | NO |
+---------------+--------------+------------+-------------+-----------+-------------+
3 row in set. Query took 0 seconds.
```
# Commentary
Note that the identifiers are case sensitive (which is a more general
problem that affects all name resolution, not just `SHOW COLUMNS`). Ideally this should also work:
```
> show columns from T;
Plan("Unknown relation for SHOW COLUMNS: T")
> select * from T;
Plan("Table or CTE with name \'T\' not found")
```
Closes#9866 from alamb/alamb/show_columns
Authored-by: Andrew Lamb <andrew@nerdnetworks.org>
Signed-off-by: Andrew Lamb <andrew@nerdnetworks.org>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@alamb@andygrove@returnString@jorgecarleitao
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

ARROW-12107: [Rust][DataFusion] Support SELECT * from information_schema.columns - #9840

Closed
alamb wants to merge 5 commits into
apache:masterfrom
alamb:alamn/information_schema_columns
Closed

ARROW-12107: [Rust][DataFusion] Support SELECT * from information_schema.columns#9840
alamb wants to merge 5 commits into
apache:masterfrom
alamb:alamn/information_schema_columns

Conversation

@alamb

@alambalamb commented Mar 29, 2021

Copy link
Copy Markdown
Contributor

Builds on the code in #9818

Rationale

Provide schema metadata access (so a user can see what columns exist and their type).

See the doc for background: https://docs.google.com/document/d/12cpZUSNPqVH9Z0BBx6O8REu7TFqL-NPPAYCUPpDls1k/edit#

I plan to add support for SHOW COLUMNS possibly as a follow on PR (though I have found out that SHOW COLUMNS and SHOW TABLES are not supported by either MySQL or by Postgres 🤔 )

Changes

I chose to add the first 15 columns from information_schema.columns You can see the full list in Postgres here and SQL Server here.

There are a bunch more columns that say "Applies to features not available in PostgreSQL" and that don't apply to DataFusion either-- since my usecase is to get the basic schema information out I chose not to add a bunch of columns that are always null at this time.

I feel the use of column builders here is somewhat awkward (as it requires many calls to unwrap). I am thinking of a follow on PR to refactor this code to use Vec<String> and Vec<u64> and then create StringArray and UInt64Array directly from them but for now I just want the functionality

Example use

Setup:

echo "1,Foo,44.9" > /tmp/table.csv
echo "2,Bar,22.1" >> /tmp/table.csv
cargo run --bin datafusion-cli

Then run :

> CREATE EXTERNAL TABLE t(a int, b varchar, c float)
STORED AS CSV
LOCATION '/tmp/table.csv';
0 rows in set. Query took 0 seconds.
> select table_name, column_name, ordinal_position, is_nullable, data_type from information_schema.columns;
+------------+-------------+------------------+-------------+-----------+
| table_name | column_name | ordinal_position | is_nullable | data_type |
+------------+-------------+------------------+-------------+-----------+
| t | a | 0 | NO | Int32 |
| t | b | 1 | NO | Utf8 |
| t | c | 2 | NO | Float32 |
+------------+-------------+------------------+-------------+-----------+
3 row in set. Query took 0 seconds.

@github-actions

Copy link
Copy Markdown

@alambalamb changed the title ARROW-12107: [Rust][DataFusion] Support SELECT * from information_schema.columnsARROW-12107: [Rust][DataFusion] Support SELECT * from information_schema.columnsMar 30, 2021
@alamb
alambforce-pushed the alamn/information_schema_columns branch from ad1935d to 0a3663bCompareMarch 30, 2021 11:58
@alamb
alamb marked this pull request as ready for review March 30, 2021 11:58

@andygroveandygrove left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm excited to see this. Thanks @alamb

I had a proof-of-concept JDBC driver working against DataFusion at one point. One day I will find time to work on this again. With the information schema support it will really help with making this work with BI tools.

@alamb
alambforce-pushed the alamn/information_schema_columns branch from 0a3663b to ec17d43CompareMarch 31, 2021 17:57
@alamb

Copy link
Copy Markdown
ContributorAuthor

@jorgecarleitaojorgecarleitao left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Thanks a lot, this metadata part is really starting to shine! ✨

Comment on lines 314 to 318

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not it matters much, just more like an FYI: this can cause large binaries as every variation used is compiled individually.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can change it into just taking &str -- though I think in the case since there is just one callsite there is likely to be just one version of the code

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah, it was really just if you had not though about it. No need to change anything imo 👍

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it may be more idiomatic to use Into, or From.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok. Good idea

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In 98f702da90d18d8ae855a5eca6b0d1d6c1809551

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(which I now realize I put into #9866 rather than this PR 🤦 ) -- but it should get in that PR hopefully

@returnStringreturnString left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks great! And selfishly, really happy to see the namespacing stuff being used to power cool new features 😄

@alamb

Copy link
Copy Markdown
ContributorAuthor

Looks great! And selfishly, really happy to see the namespacing stuff being used to power cool new features 😄

@returnString -- the namespacing stuff is pretty cool. I didn't realize how much easier it would make my life when it came in!

@alamb
alambforce-pushed the alamn/information_schema_columns branch from ec17d43 to c18f0aeCompareMarch 31, 2021 21:07
@alambalamb closed this in caa8950Apr 1, 2021
@alamb
alamb deleted the alamn/information_schema_columns branch April 1, 2021 12:00
alamb added a commit that referenced this pull request Apr 6, 2021
# Rationale
Accessing the list of columns via `select * from information_schema.columns` (introduced in #9840) is a lot to type
See the doc for background: https://docs.google.com/document/d/12cpZUSNPqVH9Z0BBx6O8REu7TFqL-NPPAYCUPpDls1k/edit#
This is a sister PR to `SHOW TABLES` here: #9847
# Proposal
Add support for `SHOW COLUMNS FROM <table>` command.
Following the MySQL syntax supported by sqlparser: https://dev.mysql.com/doc/refman/8.0/en/show-columns.html
# Example Use
Setup:
```
echo "1,Foo,44.9" > /tmp/table.csv
echo "2,Bar,22.1" >> /tmp/table.csv
cargo run --bin datafusion-cli
```
Then run :
```
> CREATE EXTERNAL TABLE t(a int, b varchar, c float)
STORED AS CSV
LOCATION '/tmp/table.csv';
0 rows in set. Query took 0 seconds.
> show columns from t;
+---------------+--------------+------------+-------------+-----------+-------------+
| table_catalog | table_schema | table_name | column_name | data_type | is_nullable |
+---------------+--------------+------------+-------------+-----------+-------------+
| datafusion | public | t | a | Int32 | NO |
| datafusion | public | t | b | Utf8 | NO |
| datafusion | public | t | c | Float32 | NO |
+---------------+--------------+------------+-------------+-----------+-------------+
3 row in set. Query took 0 seconds.
```
# Commentary
Note that the identifiers are case sensitive (which is a more general
problem that affects all name resolution, not just `SHOW COLUMNS`). Ideally this should also work:
```
> show columns from T;
Plan("Unknown relation for SHOW COLUMNS: T")
> select * from T;
Plan("Table or CTE with name \'T\' not found")
```
Closes#9866 from alamb/alamb/show_columns
Authored-by: Andrew Lamb <andrew@nerdnetworks.org>
Signed-off-by: Andrew Lamb <andrew@nerdnetworks.org>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@alamb@andygrove@returnString@jorgecarleitao
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

ARROW-12107: [Rust][DataFusion] Support SELECT * from information_schema.columns - #9840

Closed
alamb wants to merge 5 commits into
apache:masterfrom
alamb:alamn/information_schema_columns
Closed

ARROW-12107: [Rust][DataFusion] Support SELECT * from information_schema.columns#9840
alamb wants to merge 5 commits into
apache:masterfrom
alamb:alamn/information_schema_columns

Conversation

@alamb

@alambalamb commented Mar 29, 2021

Copy link
Copy Markdown
Contributor

Builds on the code in #9818

Rationale

Provide schema metadata access (so a user can see what columns exist and their type).

See the doc for background: https://docs.google.com/document/d/12cpZUSNPqVH9Z0BBx6O8REu7TFqL-NPPAYCUPpDls1k/edit#

I plan to add support for SHOW COLUMNS possibly as a follow on PR (though I have found out that SHOW COLUMNS and SHOW TABLES are not supported by either MySQL or by Postgres 🤔 )

Changes

I chose to add the first 15 columns from information_schema.columns You can see the full list in Postgres here and SQL Server here.

There are a bunch more columns that say "Applies to features not available in PostgreSQL" and that don't apply to DataFusion either-- since my usecase is to get the basic schema information out I chose not to add a bunch of columns that are always null at this time.

I feel the use of column builders here is somewhat awkward (as it requires many calls to unwrap). I am thinking of a follow on PR to refactor this code to use Vec<String> and Vec<u64> and then create StringArray and UInt64Array directly from them but for now I just want the functionality

Example use

Setup:

echo "1,Foo,44.9" > /tmp/table.csv
echo "2,Bar,22.1" >> /tmp/table.csv
cargo run --bin datafusion-cli

Then run :

> CREATE EXTERNAL TABLE t(a int, b varchar, c float)
STORED AS CSV
LOCATION '/tmp/table.csv';
0 rows in set. Query took 0 seconds.
> select table_name, column_name, ordinal_position, is_nullable, data_type from information_schema.columns;
+------------+-------------+------------------+-------------+-----------+
| table_name | column_name | ordinal_position | is_nullable | data_type |
+------------+-------------+------------------+-------------+-----------+
| t | a | 0 | NO | Int32 |
| t | b | 1 | NO | Utf8 |
| t | c | 2 | NO | Float32 |
+------------+-------------+------------------+-------------+-----------+
3 row in set. Query took 0 seconds.

@github-actions

Copy link
Copy Markdown

@alambalamb changed the title ARROW-12107: [Rust][DataFusion] Support SELECT * from information_schema.columnsARROW-12107: [Rust][DataFusion] Support SELECT * from information_schema.columnsMar 30, 2021
@alamb
alambforce-pushed the alamn/information_schema_columns branch from ad1935d to 0a3663bCompareMarch 30, 2021 11:58
@alamb
alamb marked this pull request as ready for review March 30, 2021 11:58

@andygroveandygrove left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm excited to see this. Thanks @alamb

I had a proof-of-concept JDBC driver working against DataFusion at one point. One day I will find time to work on this again. With the information schema support it will really help with making this work with BI tools.

@alamb
alambforce-pushed the alamn/information_schema_columns branch from 0a3663b to ec17d43CompareMarch 31, 2021 17:57
@alamb

Copy link
Copy Markdown
ContributorAuthor

@jorgecarleitaojorgecarleitao left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Thanks a lot, this metadata part is really starting to shine! ✨

Comment on lines 314 to 318

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not it matters much, just more like an FYI: this can cause large binaries as every variation used is compiled individually.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can change it into just taking &str -- though I think in the case since there is just one callsite there is likely to be just one version of the code

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah, it was really just if you had not though about it. No need to change anything imo 👍

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it may be more idiomatic to use Into, or From.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok. Good idea

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In 98f702da90d18d8ae855a5eca6b0d1d6c1809551

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(which I now realize I put into #9866 rather than this PR 🤦 ) -- but it should get in that PR hopefully

@returnStringreturnString left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks great! And selfishly, really happy to see the namespacing stuff being used to power cool new features 😄

@alamb

Copy link
Copy Markdown
ContributorAuthor

Looks great! And selfishly, really happy to see the namespacing stuff being used to power cool new features 😄

@returnString -- the namespacing stuff is pretty cool. I didn't realize how much easier it would make my life when it came in!

@alamb
alambforce-pushed the alamn/information_schema_columns branch from ec17d43 to c18f0aeCompareMarch 31, 2021 21:07
@alambalamb closed this in caa8950Apr 1, 2021
@alamb
alamb deleted the alamn/information_schema_columns branch April 1, 2021 12:00
alamb added a commit that referenced this pull request Apr 6, 2021
# Rationale
Accessing the list of columns via `select * from information_schema.columns` (introduced in #9840) is a lot to type
See the doc for background: https://docs.google.com/document/d/12cpZUSNPqVH9Z0BBx6O8REu7TFqL-NPPAYCUPpDls1k/edit#
This is a sister PR to `SHOW TABLES` here: #9847
# Proposal
Add support for `SHOW COLUMNS FROM <table>` command.
Following the MySQL syntax supported by sqlparser: https://dev.mysql.com/doc/refman/8.0/en/show-columns.html
# Example Use
Setup:
```
echo "1,Foo,44.9" > /tmp/table.csv
echo "2,Bar,22.1" >> /tmp/table.csv
cargo run --bin datafusion-cli
```
Then run :
```
> CREATE EXTERNAL TABLE t(a int, b varchar, c float)
STORED AS CSV
LOCATION '/tmp/table.csv';
0 rows in set. Query took 0 seconds.
> show columns from t;
+---------------+--------------+------------+-------------+-----------+-------------+
| table_catalog | table_schema | table_name | column_name | data_type | is_nullable |
+---------------+--------------+------------+-------------+-----------+-------------+
| datafusion | public | t | a | Int32 | NO |
| datafusion | public | t | b | Utf8 | NO |
| datafusion | public | t | c | Float32 | NO |
+---------------+--------------+------------+-------------+-----------+-------------+
3 row in set. Query took 0 seconds.
```
# Commentary
Note that the identifiers are case sensitive (which is a more general
problem that affects all name resolution, not just `SHOW COLUMNS`). Ideally this should also work:
```
> show columns from T;
Plan("Unknown relation for SHOW COLUMNS: T")
> select * from T;
Plan("Table or CTE with name \'T\' not found")
```
Closes#9866 from alamb/alamb/show_columns
Authored-by: Andrew Lamb <andrew@nerdnetworks.org>
Signed-off-by: Andrew Lamb <andrew@nerdnetworks.org>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@alamb@andygrove@returnString@jorgecarleitao
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

ARROW-12107: [Rust][DataFusion] Support SELECT * from information_schema.columns - #9840

Closed
alamb wants to merge 5 commits into
apache:masterfrom
alamb:alamn/information_schema_columns
Closed

ARROW-12107: [Rust][DataFusion] Support SELECT * from information_schema.columns#9840
alamb wants to merge 5 commits into
apache:masterfrom
alamb:alamn/information_schema_columns

Conversation

@alamb

@alambalamb commented Mar 29, 2021

Copy link
Copy Markdown
Contributor

Builds on the code in #9818

Rationale

Provide schema metadata access (so a user can see what columns exist and their type).

See the doc for background: https://docs.google.com/document/d/12cpZUSNPqVH9Z0BBx6O8REu7TFqL-NPPAYCUPpDls1k/edit#

I plan to add support for SHOW COLUMNS possibly as a follow on PR (though I have found out that SHOW COLUMNS and SHOW TABLES are not supported by either MySQL or by Postgres 🤔 )

Changes

I chose to add the first 15 columns from information_schema.columns You can see the full list in Postgres here and SQL Server here.

There are a bunch more columns that say "Applies to features not available in PostgreSQL" and that don't apply to DataFusion either-- since my usecase is to get the basic schema information out I chose not to add a bunch of columns that are always null at this time.

I feel the use of column builders here is somewhat awkward (as it requires many calls to unwrap). I am thinking of a follow on PR to refactor this code to use Vec<String> and Vec<u64> and then create StringArray and UInt64Array directly from them but for now I just want the functionality

Example use

Setup:

echo "1,Foo,44.9" > /tmp/table.csv
echo "2,Bar,22.1" >> /tmp/table.csv
cargo run --bin datafusion-cli

Then run :

> CREATE EXTERNAL TABLE t(a int, b varchar, c float)
STORED AS CSV
LOCATION '/tmp/table.csv';
0 rows in set. Query took 0 seconds.
> select table_name, column_name, ordinal_position, is_nullable, data_type from information_schema.columns;
+------------+-------------+------------------+-------------+-----------+
| table_name | column_name | ordinal_position | is_nullable | data_type |
+------------+-------------+------------------+-------------+-----------+
| t | a | 0 | NO | Int32 |
| t | b | 1 | NO | Utf8 |
| t | c | 2 | NO | Float32 |
+------------+-------------+------------------+-------------+-----------+
3 row in set. Query took 0 seconds.

@github-actions

Copy link
Copy Markdown

@alambalamb changed the title ARROW-12107: [Rust][DataFusion] Support SELECT * from information_schema.columnsARROW-12107: [Rust][DataFusion] Support SELECT * from information_schema.columnsMar 30, 2021
@alamb
alambforce-pushed the alamn/information_schema_columns branch from ad1935d to 0a3663bCompareMarch 30, 2021 11:58
@alamb
alamb marked this pull request as ready for review March 30, 2021 11:58

@andygroveandygrove left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm excited to see this. Thanks @alamb

I had a proof-of-concept JDBC driver working against DataFusion at one point. One day I will find time to work on this again. With the information schema support it will really help with making this work with BI tools.

@alamb
alambforce-pushed the alamn/information_schema_columns branch from 0a3663b to ec17d43CompareMarch 31, 2021 17:57
@alamb

Copy link
Copy Markdown
ContributorAuthor

@jorgecarleitaojorgecarleitao left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Thanks a lot, this metadata part is really starting to shine! ✨

Comment on lines 314 to 318

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not it matters much, just more like an FYI: this can cause large binaries as every variation used is compiled individually.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can change it into just taking &str -- though I think in the case since there is just one callsite there is likely to be just one version of the code

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah, it was really just if you had not though about it. No need to change anything imo 👍

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it may be more idiomatic to use Into, or From.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok. Good idea

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In 98f702da90d18d8ae855a5eca6b0d1d6c1809551

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(which I now realize I put into #9866 rather than this PR 🤦 ) -- but it should get in that PR hopefully

@returnStringreturnString left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks great! And selfishly, really happy to see the namespacing stuff being used to power cool new features 😄

@alamb

Copy link
Copy Markdown
ContributorAuthor

Looks great! And selfishly, really happy to see the namespacing stuff being used to power cool new features 😄

@returnString -- the namespacing stuff is pretty cool. I didn't realize how much easier it would make my life when it came in!

@alamb
alambforce-pushed the alamn/information_schema_columns branch from ec17d43 to c18f0aeCompareMarch 31, 2021 21:07
@alambalamb closed this in caa8950Apr 1, 2021
@alamb
alamb deleted the alamn/information_schema_columns branch April 1, 2021 12:00
alamb added a commit that referenced this pull request Apr 6, 2021
# Rationale
Accessing the list of columns via `select * from information_schema.columns` (introduced in #9840) is a lot to type
See the doc for background: https://docs.google.com/document/d/12cpZUSNPqVH9Z0BBx6O8REu7TFqL-NPPAYCUPpDls1k/edit#
This is a sister PR to `SHOW TABLES` here: #9847
# Proposal
Add support for `SHOW COLUMNS FROM <table>` command.
Following the MySQL syntax supported by sqlparser: https://dev.mysql.com/doc/refman/8.0/en/show-columns.html
# Example Use
Setup:
```
echo "1,Foo,44.9" > /tmp/table.csv
echo "2,Bar,22.1" >> /tmp/table.csv
cargo run --bin datafusion-cli
```
Then run :
```
> CREATE EXTERNAL TABLE t(a int, b varchar, c float)
STORED AS CSV
LOCATION '/tmp/table.csv';
0 rows in set. Query took 0 seconds.
> show columns from t;
+---------------+--------------+------------+-------------+-----------+-------------+
| table_catalog | table_schema | table_name | column_name | data_type | is_nullable |
+---------------+--------------+------------+-------------+-----------+-------------+
| datafusion | public | t | a | Int32 | NO |
| datafusion | public | t | b | Utf8 | NO |
| datafusion | public | t | c | Float32 | NO |
+---------------+--------------+------------+-------------+-----------+-------------+
3 row in set. Query took 0 seconds.
```
# Commentary
Note that the identifiers are case sensitive (which is a more general
problem that affects all name resolution, not just `SHOW COLUMNS`). Ideally this should also work:
```
> show columns from T;
Plan("Unknown relation for SHOW COLUMNS: T")
> select * from T;
Plan("Table or CTE with name \'T\' not found")
```
Closes#9866 from alamb/alamb/show_columns
Authored-by: Andrew Lamb <andrew@nerdnetworks.org>
Signed-off-by: Andrew Lamb <andrew@nerdnetworks.org>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@alamb@andygrove@returnString@jorgecarleitao
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

ARROW-12107: [Rust][DataFusion] Support SELECT * from information_schema.columns - #9840

Closed
alamb wants to merge 5 commits into
apache:masterfrom
alamb:alamn/information_schema_columns
Closed

ARROW-12107: [Rust][DataFusion] Support SELECT * from information_schema.columns#9840
alamb wants to merge 5 commits into
apache:masterfrom
alamb:alamn/information_schema_columns

Conversation

@alamb

@alambalamb commented Mar 29, 2021

Copy link
Copy Markdown
Contributor

Builds on the code in #9818

Rationale

Provide schema metadata access (so a user can see what columns exist and their type).

See the doc for background: https://docs.google.com/document/d/12cpZUSNPqVH9Z0BBx6O8REu7TFqL-NPPAYCUPpDls1k/edit#

I plan to add support for SHOW COLUMNS possibly as a follow on PR (though I have found out that SHOW COLUMNS and SHOW TABLES are not supported by either MySQL or by Postgres 🤔 )

Changes

I chose to add the first 15 columns from information_schema.columns You can see the full list in Postgres here and SQL Server here.

There are a bunch more columns that say "Applies to features not available in PostgreSQL" and that don't apply to DataFusion either-- since my usecase is to get the basic schema information out I chose not to add a bunch of columns that are always null at this time.

I feel the use of column builders here is somewhat awkward (as it requires many calls to unwrap). I am thinking of a follow on PR to refactor this code to use Vec<String> and Vec<u64> and then create StringArray and UInt64Array directly from them but for now I just want the functionality

Example use

Setup:

echo "1,Foo,44.9" > /tmp/table.csv
echo "2,Bar,22.1" >> /tmp/table.csv
cargo run --bin datafusion-cli

Then run :

> CREATE EXTERNAL TABLE t(a int, b varchar, c float)
STORED AS CSV
LOCATION '/tmp/table.csv';
0 rows in set. Query took 0 seconds.
> select table_name, column_name, ordinal_position, is_nullable, data_type from information_schema.columns;
+------------+-------------+------------------+-------------+-----------+
| table_name | column_name | ordinal_position | is_nullable | data_type |
+------------+-------------+------------------+-------------+-----------+
| t | a | 0 | NO | Int32 |
| t | b | 1 | NO | Utf8 |
| t | c | 2 | NO | Float32 |
+------------+-------------+------------------+-------------+-----------+
3 row in set. Query took 0 seconds.

@github-actions

Copy link
Copy Markdown

@alambalamb changed the title ARROW-12107: [Rust][DataFusion] Support SELECT * from information_schema.columnsARROW-12107: [Rust][DataFusion] Support SELECT * from information_schema.columnsMar 30, 2021
@alamb
alambforce-pushed the alamn/information_schema_columns branch from ad1935d to 0a3663bCompareMarch 30, 2021 11:58
@alamb
alamb marked this pull request as ready for review March 30, 2021 11:58

@andygroveandygrove left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm excited to see this. Thanks @alamb

I had a proof-of-concept JDBC driver working against DataFusion at one point. One day I will find time to work on this again. With the information schema support it will really help with making this work with BI tools.

@alamb
alambforce-pushed the alamn/information_schema_columns branch from 0a3663b to ec17d43CompareMarch 31, 2021 17:57
@alamb

Copy link
Copy Markdown
ContributorAuthor

@jorgecarleitaojorgecarleitao left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Thanks a lot, this metadata part is really starting to shine! ✨

Comment on lines 314 to 318

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not it matters much, just more like an FYI: this can cause large binaries as every variation used is compiled individually.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can change it into just taking &str -- though I think in the case since there is just one callsite there is likely to be just one version of the code

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah, it was really just if you had not though about it. No need to change anything imo 👍

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it may be more idiomatic to use Into, or From.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok. Good idea

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In 98f702da90d18d8ae855a5eca6b0d1d6c1809551

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(which I now realize I put into #9866 rather than this PR 🤦 ) -- but it should get in that PR hopefully

@returnStringreturnString left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks great! And selfishly, really happy to see the namespacing stuff being used to power cool new features 😄

@alamb

Copy link
Copy Markdown
ContributorAuthor

Looks great! And selfishly, really happy to see the namespacing stuff being used to power cool new features 😄

@returnString -- the namespacing stuff is pretty cool. I didn't realize how much easier it would make my life when it came in!

@alamb
alambforce-pushed the alamn/information_schema_columns branch from ec17d43 to c18f0aeCompareMarch 31, 2021 21:07
@alambalamb closed this in caa8950Apr 1, 2021
@alamb
alamb deleted the alamn/information_schema_columns branch April 1, 2021 12:00
alamb added a commit that referenced this pull request Apr 6, 2021
# Rationale
Accessing the list of columns via `select * from information_schema.columns` (introduced in #9840) is a lot to type
See the doc for background: https://docs.google.com/document/d/12cpZUSNPqVH9Z0BBx6O8REu7TFqL-NPPAYCUPpDls1k/edit#
This is a sister PR to `SHOW TABLES` here: #9847
# Proposal
Add support for `SHOW COLUMNS FROM <table>` command.
Following the MySQL syntax supported by sqlparser: https://dev.mysql.com/doc/refman/8.0/en/show-columns.html
# Example Use
Setup:
```
echo "1,Foo,44.9" > /tmp/table.csv
echo "2,Bar,22.1" >> /tmp/table.csv
cargo run --bin datafusion-cli
```
Then run :
```
> CREATE EXTERNAL TABLE t(a int, b varchar, c float)
STORED AS CSV
LOCATION '/tmp/table.csv';
0 rows in set. Query took 0 seconds.
> show columns from t;
+---------------+--------------+------------+-------------+-----------+-------------+
| table_catalog | table_schema | table_name | column_name | data_type | is_nullable |
+---------------+--------------+------------+-------------+-----------+-------------+
| datafusion | public | t | a | Int32 | NO |
| datafusion | public | t | b | Utf8 | NO |
| datafusion | public | t | c | Float32 | NO |
+---------------+--------------+------------+-------------+-----------+-------------+
3 row in set. Query took 0 seconds.
```
# Commentary
Note that the identifiers are case sensitive (which is a more general
problem that affects all name resolution, not just `SHOW COLUMNS`). Ideally this should also work:
```
> show columns from T;
Plan("Unknown relation for SHOW COLUMNS: T")
> select * from T;
Plan("Table or CTE with name \'T\' not found")
```
Closes#9866 from alamb/alamb/show_columns
Authored-by: Andrew Lamb <andrew@nerdnetworks.org>
Signed-off-by: Andrew Lamb <andrew@nerdnetworks.org>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@alamb@andygrove@returnString@jorgecarleitao
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

ARROW-12107: [Rust][DataFusion] Support SELECT * from information_schema.columns - #9840

Closed
alamb wants to merge 5 commits into
apache:masterfrom
alamb:alamn/information_schema_columns
Closed

ARROW-12107: [Rust][DataFusion] Support SELECT * from information_schema.columns#9840
alamb wants to merge 5 commits into
apache:masterfrom
alamb:alamn/information_schema_columns

Conversation

@alamb

@alambalamb commented Mar 29, 2021

Copy link
Copy Markdown
Contributor

Builds on the code in #9818

Rationale

Provide schema metadata access (so a user can see what columns exist and their type).

See the doc for background: https://docs.google.com/document/d/12cpZUSNPqVH9Z0BBx6O8REu7TFqL-NPPAYCUPpDls1k/edit#

I plan to add support for SHOW COLUMNS possibly as a follow on PR (though I have found out that SHOW COLUMNS and SHOW TABLES are not supported by either MySQL or by Postgres 🤔 )

Changes

I chose to add the first 15 columns from information_schema.columns You can see the full list in Postgres here and SQL Server here.

There are a bunch more columns that say "Applies to features not available in PostgreSQL" and that don't apply to DataFusion either-- since my usecase is to get the basic schema information out I chose not to add a bunch of columns that are always null at this time.

I feel the use of column builders here is somewhat awkward (as it requires many calls to unwrap). I am thinking of a follow on PR to refactor this code to use Vec<String> and Vec<u64> and then create StringArray and UInt64Array directly from them but for now I just want the functionality

Example use

Setup:

echo "1,Foo,44.9" > /tmp/table.csv
echo "2,Bar,22.1" >> /tmp/table.csv
cargo run --bin datafusion-cli

Then run :

> CREATE EXTERNAL TABLE t(a int, b varchar, c float)
STORED AS CSV
LOCATION '/tmp/table.csv';
0 rows in set. Query took 0 seconds.
> select table_name, column_name, ordinal_position, is_nullable, data_type from information_schema.columns;
+------------+-------------+------------------+-------------+-----------+
| table_name | column_name | ordinal_position | is_nullable | data_type |
+------------+-------------+------------------+-------------+-----------+
| t | a | 0 | NO | Int32 |
| t | b | 1 | NO | Utf8 |
| t | c | 2 | NO | Float32 |
+------------+-------------+------------------+-------------+-----------+
3 row in set. Query took 0 seconds.

@github-actions

Copy link
Copy Markdown

@alambalamb changed the title ARROW-12107: [Rust][DataFusion] Support SELECT * from information_schema.columnsARROW-12107: [Rust][DataFusion] Support SELECT * from information_schema.columnsMar 30, 2021
@alamb
alambforce-pushed the alamn/information_schema_columns branch from ad1935d to 0a3663bCompareMarch 30, 2021 11:58
@alamb
alamb marked this pull request as ready for review March 30, 2021 11:58

@andygroveandygrove left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm excited to see this. Thanks @alamb

I had a proof-of-concept JDBC driver working against DataFusion at one point. One day I will find time to work on this again. With the information schema support it will really help with making this work with BI tools.

@alamb
alambforce-pushed the alamn/information_schema_columns branch from 0a3663b to ec17d43CompareMarch 31, 2021 17:57
@alamb

Copy link
Copy Markdown
ContributorAuthor

@jorgecarleitaojorgecarleitao left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Thanks a lot, this metadata part is really starting to shine! ✨

Comment on lines 314 to 318

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not it matters much, just more like an FYI: this can cause large binaries as every variation used is compiled individually.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can change it into just taking &str -- though I think in the case since there is just one callsite there is likely to be just one version of the code

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah, it was really just if you had not though about it. No need to change anything imo 👍

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it may be more idiomatic to use Into, or From.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok. Good idea

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In 98f702da90d18d8ae855a5eca6b0d1d6c1809551

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(which I now realize I put into #9866 rather than this PR 🤦 ) -- but it should get in that PR hopefully

@returnStringreturnString left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks great! And selfishly, really happy to see the namespacing stuff being used to power cool new features 😄

@alamb

Copy link
Copy Markdown
ContributorAuthor

Looks great! And selfishly, really happy to see the namespacing stuff being used to power cool new features 😄

@returnString -- the namespacing stuff is pretty cool. I didn't realize how much easier it would make my life when it came in!

@alamb
alambforce-pushed the alamn/information_schema_columns branch from ec17d43 to c18f0aeCompareMarch 31, 2021 21:07
@alambalamb closed this in caa8950Apr 1, 2021
@alamb
alamb deleted the alamn/information_schema_columns branch April 1, 2021 12:00
alamb added a commit that referenced this pull request Apr 6, 2021
# Rationale
Accessing the list of columns via `select * from information_schema.columns` (introduced in #9840) is a lot to type
See the doc for background: https://docs.google.com/document/d/12cpZUSNPqVH9Z0BBx6O8REu7TFqL-NPPAYCUPpDls1k/edit#
This is a sister PR to `SHOW TABLES` here: #9847
# Proposal
Add support for `SHOW COLUMNS FROM <table>` command.
Following the MySQL syntax supported by sqlparser: https://dev.mysql.com/doc/refman/8.0/en/show-columns.html
# Example Use
Setup:
```
echo "1,Foo,44.9" > /tmp/table.csv
echo "2,Bar,22.1" >> /tmp/table.csv
cargo run --bin datafusion-cli
```
Then run :
```
> CREATE EXTERNAL TABLE t(a int, b varchar, c float)
STORED AS CSV
LOCATION '/tmp/table.csv';
0 rows in set. Query took 0 seconds.
> show columns from t;
+---------------+--------------+------------+-------------+-----------+-------------+
| table_catalog | table_schema | table_name | column_name | data_type | is_nullable |
+---------------+--------------+------------+-------------+-----------+-------------+
| datafusion | public | t | a | Int32 | NO |
| datafusion | public | t | b | Utf8 | NO |
| datafusion | public | t | c | Float32 | NO |
+---------------+--------------+------------+-------------+-----------+-------------+
3 row in set. Query took 0 seconds.
```
# Commentary
Note that the identifiers are case sensitive (which is a more general
problem that affects all name resolution, not just `SHOW COLUMNS`). Ideally this should also work:
```
> show columns from T;
Plan("Unknown relation for SHOW COLUMNS: T")
> select * from T;
Plan("Table or CTE with name \'T\' not found")
```
Closes#9866 from alamb/alamb/show_columns
Authored-by: Andrew Lamb <andrew@nerdnetworks.org>
Signed-off-by: Andrew Lamb <andrew@nerdnetworks.org>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@alamb@andygrove@returnString@jorgecarleitao
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

ARROW-12107: [Rust][DataFusion] Support SELECT * from information_schema.columns - #9840

Closed
alamb wants to merge 5 commits into
apache:masterfrom
alamb:alamn/information_schema_columns
Closed

ARROW-12107: [Rust][DataFusion] Support SELECT * from information_schema.columns#9840
alamb wants to merge 5 commits into
apache:masterfrom
alamb:alamn/information_schema_columns

Conversation

@alamb

@alambalamb commented Mar 29, 2021

Copy link
Copy Markdown
Contributor

Builds on the code in #9818

Rationale

Provide schema metadata access (so a user can see what columns exist and their type).

See the doc for background: https://docs.google.com/document/d/12cpZUSNPqVH9Z0BBx6O8REu7TFqL-NPPAYCUPpDls1k/edit#

I plan to add support for SHOW COLUMNS possibly as a follow on PR (though I have found out that SHOW COLUMNS and SHOW TABLES are not supported by either MySQL or by Postgres 🤔 )

Changes

I chose to add the first 15 columns from information_schema.columns You can see the full list in Postgres here and SQL Server here.

There are a bunch more columns that say "Applies to features not available in PostgreSQL" and that don't apply to DataFusion either-- since my usecase is to get the basic schema information out I chose not to add a bunch of columns that are always null at this time.

I feel the use of column builders here is somewhat awkward (as it requires many calls to unwrap). I am thinking of a follow on PR to refactor this code to use Vec<String> and Vec<u64> and then create StringArray and UInt64Array directly from them but for now I just want the functionality

Example use

Setup:

echo "1,Foo,44.9" > /tmp/table.csv
echo "2,Bar,22.1" >> /tmp/table.csv
cargo run --bin datafusion-cli

Then run :

> CREATE EXTERNAL TABLE t(a int, b varchar, c float)
STORED AS CSV
LOCATION '/tmp/table.csv';
0 rows in set. Query took 0 seconds.
> select table_name, column_name, ordinal_position, is_nullable, data_type from information_schema.columns;
+------------+-------------+------------------+-------------+-----------+
| table_name | column_name | ordinal_position | is_nullable | data_type |
+------------+-------------+------------------+-------------+-----------+
| t | a | 0 | NO | Int32 |
| t | b | 1 | NO | Utf8 |
| t | c | 2 | NO | Float32 |
+------------+-------------+------------------+-------------+-----------+
3 row in set. Query took 0 seconds.

@github-actions

Copy link
Copy Markdown

@alambalamb changed the title ARROW-12107: [Rust][DataFusion] Support SELECT * from information_schema.columnsARROW-12107: [Rust][DataFusion] Support SELECT * from information_schema.columnsMar 30, 2021
@alamb
alambforce-pushed the alamn/information_schema_columns branch from ad1935d to 0a3663bCompareMarch 30, 2021 11:58
@alamb
alamb marked this pull request as ready for review March 30, 2021 11:58

@andygroveandygrove left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm excited to see this. Thanks @alamb

I had a proof-of-concept JDBC driver working against DataFusion at one point. One day I will find time to work on this again. With the information schema support it will really help with making this work with BI tools.

@alamb
alambforce-pushed the alamn/information_schema_columns branch from 0a3663b to ec17d43CompareMarch 31, 2021 17:57
@alamb

Copy link
Copy Markdown
ContributorAuthor

@jorgecarleitaojorgecarleitao left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Thanks a lot, this metadata part is really starting to shine! ✨

Comment on lines 314 to 318

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not it matters much, just more like an FYI: this can cause large binaries as every variation used is compiled individually.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can change it into just taking &str -- though I think in the case since there is just one callsite there is likely to be just one version of the code

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah, it was really just if you had not though about it. No need to change anything imo 👍

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it may be more idiomatic to use Into, or From.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok. Good idea

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In 98f702da90d18d8ae855a5eca6b0d1d6c1809551

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(which I now realize I put into #9866 rather than this PR 🤦 ) -- but it should get in that PR hopefully

@returnStringreturnString left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks great! And selfishly, really happy to see the namespacing stuff being used to power cool new features 😄

@alamb

Copy link
Copy Markdown
ContributorAuthor

Looks great! And selfishly, really happy to see the namespacing stuff being used to power cool new features 😄

@returnString -- the namespacing stuff is pretty cool. I didn't realize how much easier it would make my life when it came in!

@alamb
alambforce-pushed the alamn/information_schema_columns branch from ec17d43 to c18f0aeCompareMarch 31, 2021 21:07
@alambalamb closed this in caa8950Apr 1, 2021
@alamb
alamb deleted the alamn/information_schema_columns branch April 1, 2021 12:00
alamb added a commit that referenced this pull request Apr 6, 2021
# Rationale
Accessing the list of columns via `select * from information_schema.columns` (introduced in #9840) is a lot to type
See the doc for background: https://docs.google.com/document/d/12cpZUSNPqVH9Z0BBx6O8REu7TFqL-NPPAYCUPpDls1k/edit#
This is a sister PR to `SHOW TABLES` here: #9847
# Proposal
Add support for `SHOW COLUMNS FROM <table>` command.
Following the MySQL syntax supported by sqlparser: https://dev.mysql.com/doc/refman/8.0/en/show-columns.html
# Example Use
Setup:
```
echo "1,Foo,44.9" > /tmp/table.csv
echo "2,Bar,22.1" >> /tmp/table.csv
cargo run --bin datafusion-cli
```
Then run :
```
> CREATE EXTERNAL TABLE t(a int, b varchar, c float)
STORED AS CSV
LOCATION '/tmp/table.csv';
0 rows in set. Query took 0 seconds.
> show columns from t;
+---------------+--------------+------------+-------------+-----------+-------------+
| table_catalog | table_schema | table_name | column_name | data_type | is_nullable |
+---------------+--------------+------------+-------------+-----------+-------------+
| datafusion | public | t | a | Int32 | NO |
| datafusion | public | t | b | Utf8 | NO |
| datafusion | public | t | c | Float32 | NO |
+---------------+--------------+------------+-------------+-----------+-------------+
3 row in set. Query took 0 seconds.
```
# Commentary
Note that the identifiers are case sensitive (which is a more general
problem that affects all name resolution, not just `SHOW COLUMNS`). Ideally this should also work:
```
> show columns from T;
Plan("Unknown relation for SHOW COLUMNS: T")
> select * from T;
Plan("Table or CTE with name \'T\' not found")
```
Closes#9866 from alamb/alamb/show_columns
Authored-by: Andrew Lamb <andrew@nerdnetworks.org>
Signed-off-by: Andrew Lamb <andrew@nerdnetworks.org>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@alamb@andygrove@returnString@jorgecarleitao