apache / apache/echarts

[Feature] Support for BigInt

Open
#19,237 1 comment 12 reactions 0 assignees View on GitHub
en new-feature pending
Dominant language
TypeScript
Stars
67.3k
Forks
19.8k
Avg merge
11d 14h
Merged PRs (30d)
8

Description

### What problem does this feature solve?

I'm working with Apache Arrow data via Arquero, and I often deal with BigInt values (Apache Arrow's Int64 type). However, Apache ECharts currently stumbles on BigInt, throwing errors like `Uncaught TypeError: Cannot convert a BigInt value to a number.` There were some discussions ([#13819](https://github.com/apache/echarts/issues/13819), [#12873](https://github.com/apache/echarts/issues/12873)) on this, but they didn't move forward.

BigInt support is needed for dealing with high-precision timestamps (sensor data) or large integers in datasets.

Apache Arrow is a portable format for storing column-oriented data, allowing data to be shared as-is between various systems and language runtimes. Arquero can process Arrow data directly and serialize data to the Arrow format. It can read from Apache Arrow columns out-of-the-box, enabling zero-copy query processing over loaded data.

I'm trying to avoid pre-processing the data (for casting BigInt to Number), as it is a big amount of data and I would lose the zero-copy optimizations and end up with multiple copies on memory (I already have to live with the [unneeded clone of data](https://github.com/apache/echarts/issues/17656)).

### What does the proposed API look like?

1. **Adapt Data Handling:** Adjust the data handling parts to play nice with `BigInt`, especially around uses of the `Math` API and the `isFinite` method. E.g. `detectValue` at `sourceHelper.js` or `parseDataValue` at `dataValueHelper.js`.

2. **Type Conversion:** Provide tools to switch between `BigInt` and `Number` if needed, while ensuring no loss in precision. However, this might not be necessary as all values of a dimension are of the same type.

3. **Option API Tweak:** We can allow specifying `bigint` type in the dataset's dimensions, although the type should be easy to guess by looking at the data.

Thanks.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.