ARROW-12028 ARROW-11940: [Rust][DataFusion] Add TimestampMillisecond support to GROUP BY/hash aggregates - #9773

Closed
velvia wants to merge 5 commits into
apache:masterfrom
urbanlogiq:evan/pr-arrow-12028-groupby-tsmillis
Closed

ARROW-12028 ARROW-11940: [Rust][DataFusion] Add TimestampMillisecond support to GROUP BY/hash aggregates#9773
velvia wants to merge 5 commits into
apache:masterfrom
urbanlogiq:evan/pr-arrow-12028-groupby-tsmillis

Conversation

@velvia

Copy link
Copy Markdown
Contributor

This PR adds support for TimestampMillisecondArray to Scalar, GroupByScalar, and hash_aggregate / GROUP BYs to Rust DataFusion, thus fixing 12028. I believe it might also fix 11940, though this needs input from you all.

There are some formatting changes from running cargo fmt.

@velvia

velvia commented Mar 22, 2021

Copy link
Copy Markdown
ContributorAuthor

@nevi-me@andygrove

@alamb

Copy link
Copy Markdown
Contributor

Thanks @velvia -- I plan to review this tomorrow


use std::{convert::TryFrom, fmt, iter::repeat, sync::Arc};

use arrow::array::{

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.

These imports don't seem to be necessary? The module already has array::*, ?

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.

Oh they were reformatted by cargo fmt which is what the README told me to run.....

DataType::UInt64 => {
equal_rows_elem!(UInt64Array, l, r, left, right)
}
DataType::Boolean => equal_rows_elem!(BooleanArray, l, r, left, right),

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.

Any idea why the formatting changed? Do you use a recent/stable rust/cargo/rustfmt version?

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.

This is what I'm running, is it too old?
nightly-2020-11-25-x86_64-apple-darwin (default)

Should arrow project have a rust-toolchain to specify what version of Rust to run on?

@velviavelviaMar 24, 2021

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.

FWIW, I tried running cargo fmt with +stable on 1.50.0 and it did not generate any new diffs compared to what I have here....

@Dandandan

Copy link
Copy Markdown
Contributor

This looks good @velvia , I added some minor comments.

@koukou changed the title [rust][datafusion] Fix 12028 and 11940: Add TimestampMillisecond support to GROUP BY/hash aggregatesARROW-12028 ARROW-11940: [Rust][DataFusion] Add TimestampMillisecond support to GROUP BY/hash aggregatesMar 24, 2021
@github-actions

Copy link
Copy Markdown

@alambalamb 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.

Thanks @velvia -- overall looks good.

The only thing I think is needed for this PR is tests for grouping on columns with TimestampMillisecond.

ScalarValue::UInt16(Some(v)) => GroupByScalar::UInt16(*v),
ScalarValue::UInt32(Some(v)) => GroupByScalar::UInt32(*v),
ScalarValue::UInt64(Some(v)) => GroupByScalar::UInt64(*v),
ScalarValue::TimeMillisecond(Some(v)) => GroupByScalar::TimeMillisecond(*v),

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.

Should we also add support for ScalarValue::TimeMicrosecond and ScalarValue::TimeNanosecond?

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.

Sure thing, I wasn't sure why they weren't added here....

@velvia

Copy link
Copy Markdown
ContributorAuthor

@alamb and others: have added a test and I believe addressed comments, hope this is all needed!

@alambalamb 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 good to me. Thanks @velvia !

@alamb

Copy link
Copy Markdown
Contributor

@velvia the lint job seems to have failed -- looks like the tests need to get formatted

https://github.com/apache/arrow/pull/9773/checks?check_run_id=2221026494

I tried to fix this PR by checking in the result of running cargo fmt locally, but I don't have access to push to urbanlogiq/arrow

@velvia

Copy link
Copy Markdown
ContributorAuthor

@alamb pushed the cargo fmt fix. :)

@velvia

Copy link
Copy Markdown
ContributorAuthor

It seems the Docker build failed but I can't click on or expand on the details.

@alamb

Copy link
Copy Markdown
Contributor

It seems the Docker build failed but I can't click on or expand on the details.

Yeah, that has been happening recently. I don't think it is related to this PR. I plan to merge this one as soon as the remaining tests pass

@alambalamb closed this in af4d5f4Mar 31, 2021
@velvia
velvia deleted the evan/pr-arrow-12028-groupby-tsmillis branch April 6, 2021 18:03
alamb added a commit that referenced this pull request Apr 13, 2021
…s for Timestamp(_,_)
# Rationale:
If you try and aggregate (via SUM, for example) a column of a timestamp type, DataFusion generates an error:
```
Coercion from [Timestamp(Nanosecond, None)] to the signature Uniform(1, [Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64, Float32, Float64]) failed.
```
For example, from IOx
```
> show columns from t;
+---------------+--------------+------------+-------------+-----------------------------+-------------+
| table_catalog | table_schema | table_name | column_name | data_type | is_nullable |
+---------------+--------------+------------+-------------+-----------------------------+-------------+
| datafusion | public | t | a | Utf8 | NO |
| datafusion | public | t | b | Timestamp(Nanosecond, None) | NO |
+---------------+--------------+------------+-------------+-----------------------------+-------------+
2 row in set. Query took 0 seconds.
> select sum(b) from t;
Plan("Coercion from [Timestamp(Nanosecond, None)] to the signature Uniform(1, [Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64, Float32, Float64]) failed.")
```
# Changes:
Add support for aggregating timestamp types and tests for same
# Notes
Note this is follow on / more fleshing out of the work done in #9773 by @velvia (👋 thanks for adding Timestamps to `ScalarValue`)
Supporting AVG on timestamps is tracked by https://issues.apache.org/jira/browse/ARROW-12318. It is more involved (as currently Avg assumes the output type is always F64), and not important for myuse case at the moment.
Closes#9970 from alamb/alamb/ARROW-12277-aggregate-timestamps
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.

3 participants

@velvia@alamb@Dandandan
, '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-12028 ARROW-11940: [Rust][DataFusion] Add TimestampMillisecond support to GROUP BY/hash aggregates - #9773

Closed
velvia wants to merge 5 commits into
apache:masterfrom
urbanlogiq:evan/pr-arrow-12028-groupby-tsmillis
Closed

ARROW-12028 ARROW-11940: [Rust][DataFusion] Add TimestampMillisecond support to GROUP BY/hash aggregates#9773
velvia wants to merge 5 commits into
apache:masterfrom
urbanlogiq:evan/pr-arrow-12028-groupby-tsmillis

Conversation

@velvia

Copy link
Copy Markdown
Contributor

This PR adds support for TimestampMillisecondArray to Scalar, GroupByScalar, and hash_aggregate / GROUP BYs to Rust DataFusion, thus fixing 12028. I believe it might also fix 11940, though this needs input from you all.

There are some formatting changes from running cargo fmt.

@velvia

velvia commented Mar 22, 2021

Copy link
Copy Markdown
ContributorAuthor

@nevi-me@andygrove

@alamb

Copy link
Copy Markdown
Contributor

Thanks @velvia -- I plan to review this tomorrow


use std::{convert::TryFrom, fmt, iter::repeat, sync::Arc};

use arrow::array::{

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.

These imports don't seem to be necessary? The module already has array::*, ?

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.

Oh they were reformatted by cargo fmt which is what the README told me to run.....

DataType::UInt64 => {
equal_rows_elem!(UInt64Array, l, r, left, right)
}
DataType::Boolean => equal_rows_elem!(BooleanArray, l, r, left, right),

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.

Any idea why the formatting changed? Do you use a recent/stable rust/cargo/rustfmt version?

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.

This is what I'm running, is it too old?
nightly-2020-11-25-x86_64-apple-darwin (default)

Should arrow project have a rust-toolchain to specify what version of Rust to run on?

@velviavelviaMar 24, 2021

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.

FWIW, I tried running cargo fmt with +stable on 1.50.0 and it did not generate any new diffs compared to what I have here....

@Dandandan

Copy link
Copy Markdown
Contributor

This looks good @velvia , I added some minor comments.

@koukou changed the title [rust][datafusion] Fix 12028 and 11940: Add TimestampMillisecond support to GROUP BY/hash aggregatesARROW-12028 ARROW-11940: [Rust][DataFusion] Add TimestampMillisecond support to GROUP BY/hash aggregatesMar 24, 2021
@github-actions

Copy link
Copy Markdown

@alambalamb 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.

Thanks @velvia -- overall looks good.

The only thing I think is needed for this PR is tests for grouping on columns with TimestampMillisecond.

ScalarValue::UInt16(Some(v)) => GroupByScalar::UInt16(*v),
ScalarValue::UInt32(Some(v)) => GroupByScalar::UInt32(*v),
ScalarValue::UInt64(Some(v)) => GroupByScalar::UInt64(*v),
ScalarValue::TimeMillisecond(Some(v)) => GroupByScalar::TimeMillisecond(*v),

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.

Should we also add support for ScalarValue::TimeMicrosecond and ScalarValue::TimeNanosecond?

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.

Sure thing, I wasn't sure why they weren't added here....

@velvia

Copy link
Copy Markdown
ContributorAuthor

@alamb and others: have added a test and I believe addressed comments, hope this is all needed!

@alambalamb 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 good to me. Thanks @velvia !

@alamb

Copy link
Copy Markdown
Contributor

@velvia the lint job seems to have failed -- looks like the tests need to get formatted

https://github.com/apache/arrow/pull/9773/checks?check_run_id=2221026494

I tried to fix this PR by checking in the result of running cargo fmt locally, but I don't have access to push to urbanlogiq/arrow

@velvia

Copy link
Copy Markdown
ContributorAuthor

@alamb pushed the cargo fmt fix. :)

@velvia

Copy link
Copy Markdown
ContributorAuthor

It seems the Docker build failed but I can't click on or expand on the details.

@alamb

Copy link
Copy Markdown
Contributor

It seems the Docker build failed but I can't click on or expand on the details.

Yeah, that has been happening recently. I don't think it is related to this PR. I plan to merge this one as soon as the remaining tests pass

@alambalamb closed this in af4d5f4Mar 31, 2021
@velvia
velvia deleted the evan/pr-arrow-12028-groupby-tsmillis branch April 6, 2021 18:03
alamb added a commit that referenced this pull request Apr 13, 2021
…s for Timestamp(_,_)
# Rationale:
If you try and aggregate (via SUM, for example) a column of a timestamp type, DataFusion generates an error:
```
Coercion from [Timestamp(Nanosecond, None)] to the signature Uniform(1, [Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64, Float32, Float64]) failed.
```
For example, from IOx
```
> show columns from t;
+---------------+--------------+------------+-------------+-----------------------------+-------------+
| table_catalog | table_schema | table_name | column_name | data_type | is_nullable |
+---------------+--------------+------------+-------------+-----------------------------+-------------+
| datafusion | public | t | a | Utf8 | NO |
| datafusion | public | t | b | Timestamp(Nanosecond, None) | NO |
+---------------+--------------+------------+-------------+-----------------------------+-------------+
2 row in set. Query took 0 seconds.
> select sum(b) from t;
Plan("Coercion from [Timestamp(Nanosecond, None)] to the signature Uniform(1, [Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64, Float32, Float64]) failed.")
```
# Changes:
Add support for aggregating timestamp types and tests for same
# Notes
Note this is follow on / more fleshing out of the work done in #9773 by @velvia (👋 thanks for adding Timestamps to `ScalarValue`)
Supporting AVG on timestamps is tracked by https://issues.apache.org/jira/browse/ARROW-12318. It is more involved (as currently Avg assumes the output type is always F64), and not important for myuse case at the moment.
Closes#9970 from alamb/alamb/ARROW-12277-aggregate-timestamps
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.

3 participants

@velvia@alamb@Dandandan
, '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-12028 ARROW-11940: [Rust][DataFusion] Add TimestampMillisecond support to GROUP BY/hash aggregates - #9773

Closed
velvia wants to merge 5 commits into
apache:masterfrom
urbanlogiq:evan/pr-arrow-12028-groupby-tsmillis
Closed

ARROW-12028 ARROW-11940: [Rust][DataFusion] Add TimestampMillisecond support to GROUP BY/hash aggregates#9773
velvia wants to merge 5 commits into
apache:masterfrom
urbanlogiq:evan/pr-arrow-12028-groupby-tsmillis

Conversation

@velvia

Copy link
Copy Markdown
Contributor

This PR adds support for TimestampMillisecondArray to Scalar, GroupByScalar, and hash_aggregate / GROUP BYs to Rust DataFusion, thus fixing 12028. I believe it might also fix 11940, though this needs input from you all.

There are some formatting changes from running cargo fmt.

@velvia

velvia commented Mar 22, 2021

Copy link
Copy Markdown
ContributorAuthor

@nevi-me@andygrove

@alamb

Copy link
Copy Markdown
Contributor

Thanks @velvia -- I plan to review this tomorrow


use std::{convert::TryFrom, fmt, iter::repeat, sync::Arc};

use arrow::array::{

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.

These imports don't seem to be necessary? The module already has array::*, ?

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.

Oh they were reformatted by cargo fmt which is what the README told me to run.....

DataType::UInt64 => {
equal_rows_elem!(UInt64Array, l, r, left, right)
}
DataType::Boolean => equal_rows_elem!(BooleanArray, l, r, left, right),

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.

Any idea why the formatting changed? Do you use a recent/stable rust/cargo/rustfmt version?

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.

This is what I'm running, is it too old?
nightly-2020-11-25-x86_64-apple-darwin (default)

Should arrow project have a rust-toolchain to specify what version of Rust to run on?

@velviavelviaMar 24, 2021

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.

FWIW, I tried running cargo fmt with +stable on 1.50.0 and it did not generate any new diffs compared to what I have here....

@Dandandan

Copy link
Copy Markdown
Contributor

This looks good @velvia , I added some minor comments.

@koukou changed the title [rust][datafusion] Fix 12028 and 11940: Add TimestampMillisecond support to GROUP BY/hash aggregatesARROW-12028 ARROW-11940: [Rust][DataFusion] Add TimestampMillisecond support to GROUP BY/hash aggregatesMar 24, 2021
@github-actions

Copy link
Copy Markdown

@alambalamb 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.

Thanks @velvia -- overall looks good.

The only thing I think is needed for this PR is tests for grouping on columns with TimestampMillisecond.

ScalarValue::UInt16(Some(v)) => GroupByScalar::UInt16(*v),
ScalarValue::UInt32(Some(v)) => GroupByScalar::UInt32(*v),
ScalarValue::UInt64(Some(v)) => GroupByScalar::UInt64(*v),
ScalarValue::TimeMillisecond(Some(v)) => GroupByScalar::TimeMillisecond(*v),

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.

Should we also add support for ScalarValue::TimeMicrosecond and ScalarValue::TimeNanosecond?

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.

Sure thing, I wasn't sure why they weren't added here....

@velvia

Copy link
Copy Markdown
ContributorAuthor

@alamb and others: have added a test and I believe addressed comments, hope this is all needed!

@alambalamb 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 good to me. Thanks @velvia !

@alamb

Copy link
Copy Markdown
Contributor

@velvia the lint job seems to have failed -- looks like the tests need to get formatted

https://github.com/apache/arrow/pull/9773/checks?check_run_id=2221026494

I tried to fix this PR by checking in the result of running cargo fmt locally, but I don't have access to push to urbanlogiq/arrow

@velvia

Copy link
Copy Markdown
ContributorAuthor

@alamb pushed the cargo fmt fix. :)

@velvia

Copy link
Copy Markdown
ContributorAuthor

It seems the Docker build failed but I can't click on or expand on the details.

@alamb

Copy link
Copy Markdown
Contributor

It seems the Docker build failed but I can't click on or expand on the details.

Yeah, that has been happening recently. I don't think it is related to this PR. I plan to merge this one as soon as the remaining tests pass

@alambalamb closed this in af4d5f4Mar 31, 2021
@velvia
velvia deleted the evan/pr-arrow-12028-groupby-tsmillis branch April 6, 2021 18:03
alamb added a commit that referenced this pull request Apr 13, 2021
…s for Timestamp(_,_)
# Rationale:
If you try and aggregate (via SUM, for example) a column of a timestamp type, DataFusion generates an error:
```
Coercion from [Timestamp(Nanosecond, None)] to the signature Uniform(1, [Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64, Float32, Float64]) failed.
```
For example, from IOx
```
> show columns from t;
+---------------+--------------+------------+-------------+-----------------------------+-------------+
| table_catalog | table_schema | table_name | column_name | data_type | is_nullable |
+---------------+--------------+------------+-------------+-----------------------------+-------------+
| datafusion | public | t | a | Utf8 | NO |
| datafusion | public | t | b | Timestamp(Nanosecond, None) | NO |
+---------------+--------------+------------+-------------+-----------------------------+-------------+
2 row in set. Query took 0 seconds.
> select sum(b) from t;
Plan("Coercion from [Timestamp(Nanosecond, None)] to the signature Uniform(1, [Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64, Float32, Float64]) failed.")
```
# Changes:
Add support for aggregating timestamp types and tests for same
# Notes
Note this is follow on / more fleshing out of the work done in #9773 by @velvia (👋 thanks for adding Timestamps to `ScalarValue`)
Supporting AVG on timestamps is tracked by https://issues.apache.org/jira/browse/ARROW-12318. It is more involved (as currently Avg assumes the output type is always F64), and not important for myuse case at the moment.
Closes#9970 from alamb/alamb/ARROW-12277-aggregate-timestamps
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.

3 participants

@velvia@alamb@Dandandan
, '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-12028 ARROW-11940: [Rust][DataFusion] Add TimestampMillisecond support to GROUP BY/hash aggregates - #9773

Closed
velvia wants to merge 5 commits into
apache:masterfrom
urbanlogiq:evan/pr-arrow-12028-groupby-tsmillis
Closed

ARROW-12028 ARROW-11940: [Rust][DataFusion] Add TimestampMillisecond support to GROUP BY/hash aggregates#9773
velvia wants to merge 5 commits into
apache:masterfrom
urbanlogiq:evan/pr-arrow-12028-groupby-tsmillis

Conversation

@velvia

Copy link
Copy Markdown
Contributor

This PR adds support for TimestampMillisecondArray to Scalar, GroupByScalar, and hash_aggregate / GROUP BYs to Rust DataFusion, thus fixing 12028. I believe it might also fix 11940, though this needs input from you all.

There are some formatting changes from running cargo fmt.

@velvia

velvia commented Mar 22, 2021

Copy link
Copy Markdown
ContributorAuthor

@nevi-me@andygrove

@alamb

Copy link
Copy Markdown
Contributor

Thanks @velvia -- I plan to review this tomorrow


use std::{convert::TryFrom, fmt, iter::repeat, sync::Arc};

use arrow::array::{

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.

These imports don't seem to be necessary? The module already has array::*, ?

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.

Oh they were reformatted by cargo fmt which is what the README told me to run.....

DataType::UInt64 => {
equal_rows_elem!(UInt64Array, l, r, left, right)
}
DataType::Boolean => equal_rows_elem!(BooleanArray, l, r, left, right),

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.

Any idea why the formatting changed? Do you use a recent/stable rust/cargo/rustfmt version?

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.

This is what I'm running, is it too old?
nightly-2020-11-25-x86_64-apple-darwin (default)

Should arrow project have a rust-toolchain to specify what version of Rust to run on?

@velviavelviaMar 24, 2021

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.

FWIW, I tried running cargo fmt with +stable on 1.50.0 and it did not generate any new diffs compared to what I have here....

@Dandandan

Copy link
Copy Markdown
Contributor

This looks good @velvia , I added some minor comments.

@koukou changed the title [rust][datafusion] Fix 12028 and 11940: Add TimestampMillisecond support to GROUP BY/hash aggregatesARROW-12028 ARROW-11940: [Rust][DataFusion] Add TimestampMillisecond support to GROUP BY/hash aggregatesMar 24, 2021
@github-actions

Copy link
Copy Markdown

@alambalamb 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.

Thanks @velvia -- overall looks good.

The only thing I think is needed for this PR is tests for grouping on columns with TimestampMillisecond.

ScalarValue::UInt16(Some(v)) => GroupByScalar::UInt16(*v),
ScalarValue::UInt32(Some(v)) => GroupByScalar::UInt32(*v),
ScalarValue::UInt64(Some(v)) => GroupByScalar::UInt64(*v),
ScalarValue::TimeMillisecond(Some(v)) => GroupByScalar::TimeMillisecond(*v),

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.

Should we also add support for ScalarValue::TimeMicrosecond and ScalarValue::TimeNanosecond?

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.

Sure thing, I wasn't sure why they weren't added here....

@velvia

Copy link
Copy Markdown
ContributorAuthor

@alamb and others: have added a test and I believe addressed comments, hope this is all needed!

@alambalamb 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 good to me. Thanks @velvia !

@alamb

Copy link
Copy Markdown
Contributor

@velvia the lint job seems to have failed -- looks like the tests need to get formatted

https://github.com/apache/arrow/pull/9773/checks?check_run_id=2221026494

I tried to fix this PR by checking in the result of running cargo fmt locally, but I don't have access to push to urbanlogiq/arrow

@velvia

Copy link
Copy Markdown
ContributorAuthor

@alamb pushed the cargo fmt fix. :)

@velvia

Copy link
Copy Markdown
ContributorAuthor

It seems the Docker build failed but I can't click on or expand on the details.

@alamb

Copy link
Copy Markdown
Contributor

It seems the Docker build failed but I can't click on or expand on the details.

Yeah, that has been happening recently. I don't think it is related to this PR. I plan to merge this one as soon as the remaining tests pass

@alambalamb closed this in af4d5f4Mar 31, 2021
@velvia
velvia deleted the evan/pr-arrow-12028-groupby-tsmillis branch April 6, 2021 18:03
alamb added a commit that referenced this pull request Apr 13, 2021
…s for Timestamp(_,_)
# Rationale:
If you try and aggregate (via SUM, for example) a column of a timestamp type, DataFusion generates an error:
```
Coercion from [Timestamp(Nanosecond, None)] to the signature Uniform(1, [Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64, Float32, Float64]) failed.
```
For example, from IOx
```
> show columns from t;
+---------------+--------------+------------+-------------+-----------------------------+-------------+
| table_catalog | table_schema | table_name | column_name | data_type | is_nullable |
+---------------+--------------+------------+-------------+-----------------------------+-------------+
| datafusion | public | t | a | Utf8 | NO |
| datafusion | public | t | b | Timestamp(Nanosecond, None) | NO |
+---------------+--------------+------------+-------------+-----------------------------+-------------+
2 row in set. Query took 0 seconds.
> select sum(b) from t;
Plan("Coercion from [Timestamp(Nanosecond, None)] to the signature Uniform(1, [Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64, Float32, Float64]) failed.")
```
# Changes:
Add support for aggregating timestamp types and tests for same
# Notes
Note this is follow on / more fleshing out of the work done in #9773 by @velvia (👋 thanks for adding Timestamps to `ScalarValue`)
Supporting AVG on timestamps is tracked by https://issues.apache.org/jira/browse/ARROW-12318. It is more involved (as currently Avg assumes the output type is always F64), and not important for myuse case at the moment.
Closes#9970 from alamb/alamb/ARROW-12277-aggregate-timestamps
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.

3 participants

@velvia@alamb@Dandandan
, '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-12028 ARROW-11940: [Rust][DataFusion] Add TimestampMillisecond support to GROUP BY/hash aggregates - #9773

Closed
velvia wants to merge 5 commits into
apache:masterfrom
urbanlogiq:evan/pr-arrow-12028-groupby-tsmillis
Closed

ARROW-12028 ARROW-11940: [Rust][DataFusion] Add TimestampMillisecond support to GROUP BY/hash aggregates#9773
velvia wants to merge 5 commits into
apache:masterfrom
urbanlogiq:evan/pr-arrow-12028-groupby-tsmillis

Conversation

@velvia

Copy link
Copy Markdown
Contributor

This PR adds support for TimestampMillisecondArray to Scalar, GroupByScalar, and hash_aggregate / GROUP BYs to Rust DataFusion, thus fixing 12028. I believe it might also fix 11940, though this needs input from you all.

There are some formatting changes from running cargo fmt.

@velvia

velvia commented Mar 22, 2021

Copy link
Copy Markdown
ContributorAuthor

@nevi-me@andygrove

@alamb

Copy link
Copy Markdown
Contributor

Thanks @velvia -- I plan to review this tomorrow


use std::{convert::TryFrom, fmt, iter::repeat, sync::Arc};

use arrow::array::{

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.

These imports don't seem to be necessary? The module already has array::*, ?

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.

Oh they were reformatted by cargo fmt which is what the README told me to run.....

DataType::UInt64 => {
equal_rows_elem!(UInt64Array, l, r, left, right)
}
DataType::Boolean => equal_rows_elem!(BooleanArray, l, r, left, right),

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.

Any idea why the formatting changed? Do you use a recent/stable rust/cargo/rustfmt version?

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.

This is what I'm running, is it too old?
nightly-2020-11-25-x86_64-apple-darwin (default)

Should arrow project have a rust-toolchain to specify what version of Rust to run on?

@velviavelviaMar 24, 2021

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.

FWIW, I tried running cargo fmt with +stable on 1.50.0 and it did not generate any new diffs compared to what I have here....

@Dandandan

Copy link
Copy Markdown
Contributor

This looks good @velvia , I added some minor comments.

@koukou changed the title [rust][datafusion] Fix 12028 and 11940: Add TimestampMillisecond support to GROUP BY/hash aggregatesARROW-12028 ARROW-11940: [Rust][DataFusion] Add TimestampMillisecond support to GROUP BY/hash aggregatesMar 24, 2021
@github-actions

Copy link
Copy Markdown

@alambalamb 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.

Thanks @velvia -- overall looks good.

The only thing I think is needed for this PR is tests for grouping on columns with TimestampMillisecond.

ScalarValue::UInt16(Some(v)) => GroupByScalar::UInt16(*v),
ScalarValue::UInt32(Some(v)) => GroupByScalar::UInt32(*v),
ScalarValue::UInt64(Some(v)) => GroupByScalar::UInt64(*v),
ScalarValue::TimeMillisecond(Some(v)) => GroupByScalar::TimeMillisecond(*v),

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.

Should we also add support for ScalarValue::TimeMicrosecond and ScalarValue::TimeNanosecond?

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.

Sure thing, I wasn't sure why they weren't added here....

@velvia

Copy link
Copy Markdown
ContributorAuthor

@alamb and others: have added a test and I believe addressed comments, hope this is all needed!

@alambalamb 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 good to me. Thanks @velvia !

@alamb

Copy link
Copy Markdown
Contributor

@velvia the lint job seems to have failed -- looks like the tests need to get formatted

https://github.com/apache/arrow/pull/9773/checks?check_run_id=2221026494

I tried to fix this PR by checking in the result of running cargo fmt locally, but I don't have access to push to urbanlogiq/arrow

@velvia

Copy link
Copy Markdown
ContributorAuthor

@alamb pushed the cargo fmt fix. :)

@velvia

Copy link
Copy Markdown
ContributorAuthor

It seems the Docker build failed but I can't click on or expand on the details.

@alamb

Copy link
Copy Markdown
Contributor

It seems the Docker build failed but I can't click on or expand on the details.

Yeah, that has been happening recently. I don't think it is related to this PR. I plan to merge this one as soon as the remaining tests pass

@alambalamb closed this in af4d5f4Mar 31, 2021
@velvia
velvia deleted the evan/pr-arrow-12028-groupby-tsmillis branch April 6, 2021 18:03
alamb added a commit that referenced this pull request Apr 13, 2021
…s for Timestamp(_,_)
# Rationale:
If you try and aggregate (via SUM, for example) a column of a timestamp type, DataFusion generates an error:
```
Coercion from [Timestamp(Nanosecond, None)] to the signature Uniform(1, [Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64, Float32, Float64]) failed.
```
For example, from IOx
```
> show columns from t;
+---------------+--------------+------------+-------------+-----------------------------+-------------+
| table_catalog | table_schema | table_name | column_name | data_type | is_nullable |
+---------------+--------------+------------+-------------+-----------------------------+-------------+
| datafusion | public | t | a | Utf8 | NO |
| datafusion | public | t | b | Timestamp(Nanosecond, None) | NO |
+---------------+--------------+------------+-------------+-----------------------------+-------------+
2 row in set. Query took 0 seconds.
> select sum(b) from t;
Plan("Coercion from [Timestamp(Nanosecond, None)] to the signature Uniform(1, [Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64, Float32, Float64]) failed.")
```
# Changes:
Add support for aggregating timestamp types and tests for same
# Notes
Note this is follow on / more fleshing out of the work done in #9773 by @velvia (👋 thanks for adding Timestamps to `ScalarValue`)
Supporting AVG on timestamps is tracked by https://issues.apache.org/jira/browse/ARROW-12318. It is more involved (as currently Avg assumes the output type is always F64), and not important for myuse case at the moment.
Closes#9970 from alamb/alamb/ARROW-12277-aggregate-timestamps
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.

3 participants

@velvia@alamb@Dandandan
, '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-12028 ARROW-11940: [Rust][DataFusion] Add TimestampMillisecond support to GROUP BY/hash aggregates - #9773

Closed
velvia wants to merge 5 commits into
apache:masterfrom
urbanlogiq:evan/pr-arrow-12028-groupby-tsmillis
Closed

ARROW-12028 ARROW-11940: [Rust][DataFusion] Add TimestampMillisecond support to GROUP BY/hash aggregates#9773
velvia wants to merge 5 commits into
apache:masterfrom
urbanlogiq:evan/pr-arrow-12028-groupby-tsmillis

Conversation

@velvia

Copy link
Copy Markdown
Contributor

This PR adds support for TimestampMillisecondArray to Scalar, GroupByScalar, and hash_aggregate / GROUP BYs to Rust DataFusion, thus fixing 12028. I believe it might also fix 11940, though this needs input from you all.

There are some formatting changes from running cargo fmt.

@velvia

velvia commented Mar 22, 2021

Copy link
Copy Markdown
ContributorAuthor

@nevi-me@andygrove

@alamb

Copy link
Copy Markdown
Contributor

Thanks @velvia -- I plan to review this tomorrow


use std::{convert::TryFrom, fmt, iter::repeat, sync::Arc};

use arrow::array::{

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.

These imports don't seem to be necessary? The module already has array::*, ?

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.

Oh they were reformatted by cargo fmt which is what the README told me to run.....

DataType::UInt64 => {
equal_rows_elem!(UInt64Array, l, r, left, right)
}
DataType::Boolean => equal_rows_elem!(BooleanArray, l, r, left, right),

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.

Any idea why the formatting changed? Do you use a recent/stable rust/cargo/rustfmt version?

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.

This is what I'm running, is it too old?
nightly-2020-11-25-x86_64-apple-darwin (default)

Should arrow project have a rust-toolchain to specify what version of Rust to run on?

@velviavelviaMar 24, 2021

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.

FWIW, I tried running cargo fmt with +stable on 1.50.0 and it did not generate any new diffs compared to what I have here....

@Dandandan

Copy link
Copy Markdown
Contributor

This looks good @velvia , I added some minor comments.

@koukou changed the title [rust][datafusion] Fix 12028 and 11940: Add TimestampMillisecond support to GROUP BY/hash aggregatesARROW-12028 ARROW-11940: [Rust][DataFusion] Add TimestampMillisecond support to GROUP BY/hash aggregatesMar 24, 2021
@github-actions

Copy link
Copy Markdown

@alambalamb 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.

Thanks @velvia -- overall looks good.

The only thing I think is needed for this PR is tests for grouping on columns with TimestampMillisecond.

ScalarValue::UInt16(Some(v)) => GroupByScalar::UInt16(*v),
ScalarValue::UInt32(Some(v)) => GroupByScalar::UInt32(*v),
ScalarValue::UInt64(Some(v)) => GroupByScalar::UInt64(*v),
ScalarValue::TimeMillisecond(Some(v)) => GroupByScalar::TimeMillisecond(*v),

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.

Should we also add support for ScalarValue::TimeMicrosecond and ScalarValue::TimeNanosecond?

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.

Sure thing, I wasn't sure why they weren't added here....

@velvia

Copy link
Copy Markdown
ContributorAuthor

@alamb and others: have added a test and I believe addressed comments, hope this is all needed!

@alambalamb 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 good to me. Thanks @velvia !

@alamb

Copy link
Copy Markdown
Contributor

@velvia the lint job seems to have failed -- looks like the tests need to get formatted

https://github.com/apache/arrow/pull/9773/checks?check_run_id=2221026494

I tried to fix this PR by checking in the result of running cargo fmt locally, but I don't have access to push to urbanlogiq/arrow

@velvia

Copy link
Copy Markdown
ContributorAuthor

@alamb pushed the cargo fmt fix. :)

@velvia

Copy link
Copy Markdown
ContributorAuthor

It seems the Docker build failed but I can't click on or expand on the details.

@alamb

Copy link
Copy Markdown
Contributor

It seems the Docker build failed but I can't click on or expand on the details.

Yeah, that has been happening recently. I don't think it is related to this PR. I plan to merge this one as soon as the remaining tests pass

@alambalamb closed this in af4d5f4Mar 31, 2021
@velvia
velvia deleted the evan/pr-arrow-12028-groupby-tsmillis branch April 6, 2021 18:03
alamb added a commit that referenced this pull request Apr 13, 2021
…s for Timestamp(_,_)
# Rationale:
If you try and aggregate (via SUM, for example) a column of a timestamp type, DataFusion generates an error:
```
Coercion from [Timestamp(Nanosecond, None)] to the signature Uniform(1, [Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64, Float32, Float64]) failed.
```
For example, from IOx
```
> show columns from t;
+---------------+--------------+------------+-------------+-----------------------------+-------------+
| table_catalog | table_schema | table_name | column_name | data_type | is_nullable |
+---------------+--------------+------------+-------------+-----------------------------+-------------+
| datafusion | public | t | a | Utf8 | NO |
| datafusion | public | t | b | Timestamp(Nanosecond, None) | NO |
+---------------+--------------+------------+-------------+-----------------------------+-------------+
2 row in set. Query took 0 seconds.
> select sum(b) from t;
Plan("Coercion from [Timestamp(Nanosecond, None)] to the signature Uniform(1, [Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64, Float32, Float64]) failed.")
```
# Changes:
Add support for aggregating timestamp types and tests for same
# Notes
Note this is follow on / more fleshing out of the work done in #9773 by @velvia (👋 thanks for adding Timestamps to `ScalarValue`)
Supporting AVG on timestamps is tracked by https://issues.apache.org/jira/browse/ARROW-12318. It is more involved (as currently Avg assumes the output type is always F64), and not important for myuse case at the moment.
Closes#9970 from alamb/alamb/ARROW-12277-aggregate-timestamps
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.

3 participants

@velvia@alamb@Dandandan
, '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-12028 ARROW-11940: [Rust][DataFusion] Add TimestampMillisecond support to GROUP BY/hash aggregates - #9773

Closed
velvia wants to merge 5 commits into
apache:masterfrom
urbanlogiq:evan/pr-arrow-12028-groupby-tsmillis
Closed

ARROW-12028 ARROW-11940: [Rust][DataFusion] Add TimestampMillisecond support to GROUP BY/hash aggregates#9773
velvia wants to merge 5 commits into
apache:masterfrom
urbanlogiq:evan/pr-arrow-12028-groupby-tsmillis

Conversation

@velvia

Copy link
Copy Markdown
Contributor

This PR adds support for TimestampMillisecondArray to Scalar, GroupByScalar, and hash_aggregate / GROUP BYs to Rust DataFusion, thus fixing 12028. I believe it might also fix 11940, though this needs input from you all.

There are some formatting changes from running cargo fmt.

@velvia

velvia commented Mar 22, 2021

Copy link
Copy Markdown
ContributorAuthor

@nevi-me@andygrove

@alamb

Copy link
Copy Markdown
Contributor

Thanks @velvia -- I plan to review this tomorrow


use std::{convert::TryFrom, fmt, iter::repeat, sync::Arc};

use arrow::array::{

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.

These imports don't seem to be necessary? The module already has array::*, ?

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.

Oh they were reformatted by cargo fmt which is what the README told me to run.....

DataType::UInt64 => {
equal_rows_elem!(UInt64Array, l, r, left, right)
}
DataType::Boolean => equal_rows_elem!(BooleanArray, l, r, left, right),

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.

Any idea why the formatting changed? Do you use a recent/stable rust/cargo/rustfmt version?

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.

This is what I'm running, is it too old?
nightly-2020-11-25-x86_64-apple-darwin (default)

Should arrow project have a rust-toolchain to specify what version of Rust to run on?

@velviavelviaMar 24, 2021

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.

FWIW, I tried running cargo fmt with +stable on 1.50.0 and it did not generate any new diffs compared to what I have here....

@Dandandan

Copy link
Copy Markdown
Contributor

This looks good @velvia , I added some minor comments.

@koukou changed the title [rust][datafusion] Fix 12028 and 11940: Add TimestampMillisecond support to GROUP BY/hash aggregatesARROW-12028 ARROW-11940: [Rust][DataFusion] Add TimestampMillisecond support to GROUP BY/hash aggregatesMar 24, 2021
@github-actions

Copy link
Copy Markdown

@alambalamb 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.

Thanks @velvia -- overall looks good.

The only thing I think is needed for this PR is tests for grouping on columns with TimestampMillisecond.

ScalarValue::UInt16(Some(v)) => GroupByScalar::UInt16(*v),
ScalarValue::UInt32(Some(v)) => GroupByScalar::UInt32(*v),
ScalarValue::UInt64(Some(v)) => GroupByScalar::UInt64(*v),
ScalarValue::TimeMillisecond(Some(v)) => GroupByScalar::TimeMillisecond(*v),

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.

Should we also add support for ScalarValue::TimeMicrosecond and ScalarValue::TimeNanosecond?

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.

Sure thing, I wasn't sure why they weren't added here....

@velvia

Copy link
Copy Markdown
ContributorAuthor

@alamb and others: have added a test and I believe addressed comments, hope this is all needed!

@alambalamb 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 good to me. Thanks @velvia !

@alamb

Copy link
Copy Markdown
Contributor

@velvia the lint job seems to have failed -- looks like the tests need to get formatted

https://github.com/apache/arrow/pull/9773/checks?check_run_id=2221026494

I tried to fix this PR by checking in the result of running cargo fmt locally, but I don't have access to push to urbanlogiq/arrow

@velvia

Copy link
Copy Markdown
ContributorAuthor

@alamb pushed the cargo fmt fix. :)

@velvia

Copy link
Copy Markdown
ContributorAuthor

It seems the Docker build failed but I can't click on or expand on the details.

@alamb

Copy link
Copy Markdown
Contributor

It seems the Docker build failed but I can't click on or expand on the details.

Yeah, that has been happening recently. I don't think it is related to this PR. I plan to merge this one as soon as the remaining tests pass

@alambalamb closed this in af4d5f4Mar 31, 2021
@velvia
velvia deleted the evan/pr-arrow-12028-groupby-tsmillis branch April 6, 2021 18:03
alamb added a commit that referenced this pull request Apr 13, 2021
…s for Timestamp(_,_)
# Rationale:
If you try and aggregate (via SUM, for example) a column of a timestamp type, DataFusion generates an error:
```
Coercion from [Timestamp(Nanosecond, None)] to the signature Uniform(1, [Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64, Float32, Float64]) failed.
```
For example, from IOx
```
> show columns from t;
+---------------+--------------+------------+-------------+-----------------------------+-------------+
| table_catalog | table_schema | table_name | column_name | data_type | is_nullable |
+---------------+--------------+------------+-------------+-----------------------------+-------------+
| datafusion | public | t | a | Utf8 | NO |
| datafusion | public | t | b | Timestamp(Nanosecond, None) | NO |
+---------------+--------------+------------+-------------+-----------------------------+-------------+
2 row in set. Query took 0 seconds.
> select sum(b) from t;
Plan("Coercion from [Timestamp(Nanosecond, None)] to the signature Uniform(1, [Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64, Float32, Float64]) failed.")
```
# Changes:
Add support for aggregating timestamp types and tests for same
# Notes
Note this is follow on / more fleshing out of the work done in #9773 by @velvia (👋 thanks for adding Timestamps to `ScalarValue`)
Supporting AVG on timestamps is tracked by https://issues.apache.org/jira/browse/ARROW-12318. It is more involved (as currently Avg assumes the output type is always F64), and not important for myuse case at the moment.
Closes#9970 from alamb/alamb/ARROW-12277-aggregate-timestamps
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.

3 participants

@velvia@alamb@Dandandan
, '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-12028 ARROW-11940: [Rust][DataFusion] Add TimestampMillisecond support to GROUP BY/hash aggregates - #9773

Closed
velvia wants to merge 5 commits into
apache:masterfrom
urbanlogiq:evan/pr-arrow-12028-groupby-tsmillis
Closed

ARROW-12028 ARROW-11940: [Rust][DataFusion] Add TimestampMillisecond support to GROUP BY/hash aggregates#9773
velvia wants to merge 5 commits into
apache:masterfrom
urbanlogiq:evan/pr-arrow-12028-groupby-tsmillis

Conversation

@velvia

Copy link
Copy Markdown
Contributor

This PR adds support for TimestampMillisecondArray to Scalar, GroupByScalar, and hash_aggregate / GROUP BYs to Rust DataFusion, thus fixing 12028. I believe it might also fix 11940, though this needs input from you all.

There are some formatting changes from running cargo fmt.

@velvia

velvia commented Mar 22, 2021

Copy link
Copy Markdown
ContributorAuthor

@nevi-me@andygrove

@alamb

Copy link
Copy Markdown
Contributor

Thanks @velvia -- I plan to review this tomorrow


use std::{convert::TryFrom, fmt, iter::repeat, sync::Arc};

use arrow::array::{

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.

These imports don't seem to be necessary? The module already has array::*, ?

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.

Oh they were reformatted by cargo fmt which is what the README told me to run.....

DataType::UInt64 => {
equal_rows_elem!(UInt64Array, l, r, left, right)
}
DataType::Boolean => equal_rows_elem!(BooleanArray, l, r, left, right),

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.

Any idea why the formatting changed? Do you use a recent/stable rust/cargo/rustfmt version?

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.

This is what I'm running, is it too old?
nightly-2020-11-25-x86_64-apple-darwin (default)

Should arrow project have a rust-toolchain to specify what version of Rust to run on?

@velviavelviaMar 24, 2021

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.

FWIW, I tried running cargo fmt with +stable on 1.50.0 and it did not generate any new diffs compared to what I have here....

@Dandandan

Copy link
Copy Markdown
Contributor

This looks good @velvia , I added some minor comments.

@koukou changed the title [rust][datafusion] Fix 12028 and 11940: Add TimestampMillisecond support to GROUP BY/hash aggregatesARROW-12028 ARROW-11940: [Rust][DataFusion] Add TimestampMillisecond support to GROUP BY/hash aggregatesMar 24, 2021
@github-actions

Copy link
Copy Markdown

@alambalamb 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.

Thanks @velvia -- overall looks good.

The only thing I think is needed for this PR is tests for grouping on columns with TimestampMillisecond.

ScalarValue::UInt16(Some(v)) => GroupByScalar::UInt16(*v),
ScalarValue::UInt32(Some(v)) => GroupByScalar::UInt32(*v),
ScalarValue::UInt64(Some(v)) => GroupByScalar::UInt64(*v),
ScalarValue::TimeMillisecond(Some(v)) => GroupByScalar::TimeMillisecond(*v),

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.

Should we also add support for ScalarValue::TimeMicrosecond and ScalarValue::TimeNanosecond?

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.

Sure thing, I wasn't sure why they weren't added here....

@velvia

Copy link
Copy Markdown
ContributorAuthor

@alamb and others: have added a test and I believe addressed comments, hope this is all needed!

@alambalamb 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 good to me. Thanks @velvia !

@alamb

Copy link
Copy Markdown
Contributor

@velvia the lint job seems to have failed -- looks like the tests need to get formatted

https://github.com/apache/arrow/pull/9773/checks?check_run_id=2221026494

I tried to fix this PR by checking in the result of running cargo fmt locally, but I don't have access to push to urbanlogiq/arrow

@velvia

Copy link
Copy Markdown
ContributorAuthor

@alamb pushed the cargo fmt fix. :)

@velvia

Copy link
Copy Markdown
ContributorAuthor

It seems the Docker build failed but I can't click on or expand on the details.

@alamb

Copy link
Copy Markdown
Contributor

It seems the Docker build failed but I can't click on or expand on the details.

Yeah, that has been happening recently. I don't think it is related to this PR. I plan to merge this one as soon as the remaining tests pass

@alambalamb closed this in af4d5f4Mar 31, 2021
@velvia
velvia deleted the evan/pr-arrow-12028-groupby-tsmillis branch April 6, 2021 18:03
alamb added a commit that referenced this pull request Apr 13, 2021
…s for Timestamp(_,_)
# Rationale:
If you try and aggregate (via SUM, for example) a column of a timestamp type, DataFusion generates an error:
```
Coercion from [Timestamp(Nanosecond, None)] to the signature Uniform(1, [Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64, Float32, Float64]) failed.
```
For example, from IOx
```
> show columns from t;
+---------------+--------------+------------+-------------+-----------------------------+-------------+
| table_catalog | table_schema | table_name | column_name | data_type | is_nullable |
+---------------+--------------+------------+-------------+-----------------------------+-------------+
| datafusion | public | t | a | Utf8 | NO |
| datafusion | public | t | b | Timestamp(Nanosecond, None) | NO |
+---------------+--------------+------------+-------------+-----------------------------+-------------+
2 row in set. Query took 0 seconds.
> select sum(b) from t;
Plan("Coercion from [Timestamp(Nanosecond, None)] to the signature Uniform(1, [Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64, Float32, Float64]) failed.")
```
# Changes:
Add support for aggregating timestamp types and tests for same
# Notes
Note this is follow on / more fleshing out of the work done in #9773 by @velvia (👋 thanks for adding Timestamps to `ScalarValue`)
Supporting AVG on timestamps is tracked by https://issues.apache.org/jira/browse/ARROW-12318. It is more involved (as currently Avg assumes the output type is always F64), and not important for myuse case at the moment.
Closes#9970 from alamb/alamb/ARROW-12277-aggregate-timestamps
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.

3 participants

@velvia@alamb@Dandandan