[ https://issues.apache.org/jira/browse/CASSANDRA-19546?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Cheng Wang updated CASSANDRA-19546: ----------------------------------- Authors: Cheng Wang, Stefan Miklosovic (was: Cheng Wang) > Add format_bytes and format_time functions > ------------------------------------------ > > Key: CASSANDRA-19546 > URL: https://issues.apache.org/jira/browse/CASSANDRA-19546 > Project: Apache Cassandra > Issue Type: New Feature > Components: Legacy/CQL > Reporter: Stefan Miklosovic > Assignee: Cheng Wang > Priority: Normal > Fix For: 5.x > > Time Spent: 3h 50m > Remaining Estimate: 0h > > There are cases (e.g in our system_views tables but might be applicable for > user tables as well) when a column is of a type which represents number of > bytes. However, it is quite hard to parse a value for a human to have some > estimation what that value is. This function looks at values in a column as > if it was in bytes, and it will convert it to whatever a user pleases. > Supported units are: {{{}B{}}}, {{{}KiB{}}}, {{MiB}} and {{{}GiB{}}}. The > result will be rounded to two decimal places. > I propose this: > {code:java} > CREATE TABLE ks.tb ( > id int PRIMARY KEY, > val bigint > ) {code} > > {code:java} > cqlsh> select * from ks.tb; > id | val > ----+---------------- > 5 | 60000 > 1 | 1234234 > 2 | 12342341234234 > 4 | 60001 > 7 | null > 6 | 43 > 3 | 123423 {code} > {code:java} > cqlsh> select format_bytes(val) from ks.tb; > system.format_bytes(val) > -------------------------- > 58.59 KiB > 1.18 MiB > 11494.7 GiB > 58.59 KiB > null > 43 B > 120.53 KiB{code} > I also propose that this format_bytes function (name of it might be indeed > discussed and it is just a suggestion) should be only applicable for int, > smallint, bigint and varint types. I am not sure how to apply this to e.g. > "float" or similar. As I mentioned, it is meant to convert just number of > bytes, which is just some number, to a string representation of that and I do > not think that applying that function to anything else but these types makes > sense. > The second way to call {{format_bytes}} functions is to specify into what > size unit we would like to see all values to be converted to. For example, we > want all size to be represented in mebibytes, hence we do: > {code:java} > cqlsh> select format_bytes(val, 'MiB') from ks.tb; > system.format_bytes(val, 'MiB') > ---------------------------------- > 0.06 MiB > 1.18 MiB > 11770573.84 MiB > 0.06 MiB > null > 0 MiB > 0.12 MiB {code} > Lastly, we can specify a source unit and a target unit. A source unit tells > what unit that column is logically of, the target unit tells what unit we > want these values to be converted to. For example, if we know that our column > is logically in kibibytes and we want them to be converted into mebibytes, we > would do: > > {code:java} > cqlsh> select format_bytes(val, 'Kib', 'MiB') from ks.tb; > system.format_bytes(val, 'KiB', 'MiB') > ---------------------------------------- > 58.59 MiB > 1205.31 MiB > 12053067611.56 MiB > 58.59 MiB > null > 0.04 MiB > 120.53 MiB {code} > > > Similarly to {*}{{format_bytes}}{*}, we can do transformations on > duration-like columns, namely {*}format_time{*}. > Supported units are: {{{}d{}}}, {{{}h{}}}, {{{}m{}}}, {{{}s{}}}, {{{}ms{}}}, > {{{}us{}}}, {{{}µs{}}}, {{{}ns{}}}. Supported column types on which this > function is possible to be applied: {{{}INT{}}}, {{{}TINYINT{}}}, > {{{}SMALLINT{}}}, {{{}BIGINT{}}}, {{{}VARINT{}}}, {{{}ASCII{}}}, > {{{}TEXT{}}}. For {{ASCII}} and {{TEXT}} types, text of such column has to be > a non-negative number. The result will be rounded to two decimal places. > {code:java} > cqlsh> select format_time(val) from ks.tb; > system.format_time(val) > ------------------------- > 1 m > 20.57 m > 142851.17 d > 1 m > null > 43 ms > 2.06 m {code} > We may specify what unit we want that value to be converted to, give the > column’s values are in milliseconds: > {code:java} > cqlsh> select format_time(val, 'm') from ks.tb; > system.format_time(val, 'm') > ------------------------------ > 1 m > 20.57 m > 205705687.24 m > 1 m > null > 0 m > 2.06 m {code} > Lastly, we can specify both source and target values: > {code:java} > cqlsh> select format_time(val, 's', 'h') from ks.tb; > system.format_time(val, 's', 'h') > ----------------------------------- > 16.67 h > 342.84 h > 3428428120.62 h > 16.67 h > null > 0.01 h > 34.28 h {code} -- This message was sent by Atlassian Jira (v8.20.10#820010) --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org