Skip to content
Merged
Changes from 1 commit
Commits
Show all changes
107 commits
Select commit Hold shift + click to select a range
fc3f93b
feat(redis): add storage backend and unit test
AnneYang720 Jul 25, 2022
703ea09
style: isort python imports
AnneYang720 Jul 26, 2022
6f4f8b1
style: remove useless parameter in _build_schema
AnneYang720 Jul 26, 2022
06fc38a
test: test optional param in redis config
AnneYang720 Jul 26, 2022
f21e2da
fix: remove optional for some params in RedisConfig
AnneYang720 Jul 26, 2022
3a3e78b
feat: add build schema for 'text'
AnneYang720 Jul 26, 2022
5ae1409
fix: raise ValueError when RedisConfig is None and add unit test
AnneYang720 Jul 26, 2022
9e716d1
refactor: improve the logic of update_schema
AnneYang720 Jul 26, 2022
90e5ae9
test: add None value of embedding in test_map_embedding
AnneYang720 Jul 26, 2022
5300e23
fix: remove useless code
AnneYang720 Jul 26, 2022
a6e1968
fix: set decode_responses in redis_config to False
AnneYang720 Jul 26, 2022
ca8efb9
fix: _get_offset2ids_meta return List[str]
AnneYang720 Jul 26, 2022
0dab0c4
fix: redis dropindex bug
AnneYang720 Jul 27, 2022
0276073
feat: add redis dependecies
AnneYang720 Jul 27, 2022
f64ee39
fix: switch to absolute import
AnneYang720 Aug 1, 2022
94f7e73
test: remove unnecessary tests
AnneYang720 Aug 1, 2022
86323c2
feat: add redis storage getsetdel and unit tests
AnneYang720 Aug 1, 2022
f23b73a
fix: backend call super init
AnneYang720 Aug 6, 2022
15d5ff6
fix: redis _set_doc_by_id
AnneYang720 Aug 6, 2022
5369de0
feat: add redis seqlike
AnneYang720 Aug 6, 2022
58a365b
test: add redis to test_seq
AnneYang720 Aug 6, 2022
56aab5d
feat: add redis storage subclass and entrypoint
AnneYang720 Aug 13, 2022
0cb15df
feat: add redis storage find.py
AnneYang720 Aug 13, 2022
902fede
test: test_construct add redis
AnneYang720 Aug 13, 2022
f918fcb
test: add redis to test_pull_out
AnneYang720 Aug 13, 2022
e29061d
test: add redis to test_content
AnneYang720 Aug 13, 2022
bcc6ae3
test: add redis to test_embed
AnneYang720 Aug 13, 2022
bf84282
test: add redis to test_empty
AnneYang720 Aug 13, 2022
0358083
test: add redis test_eval_class
AnneYang720 Aug 13, 2022
926ecc5
test: add redis to test_getset
AnneYang720 Aug 13, 2022
897465b
test: add redis to test_magic
AnneYang720 Aug 13, 2022
15c1c17
test: add redis to test_parallel
AnneYang720 Aug 13, 2022
bdf5529
test: add redis to test_sample
AnneYang720 Aug 13, 2022
f827c2b
test: add redis to test_text
AnneYang720 Aug 13, 2022
4626ffd
test: add redis to test_traverse
AnneYang720 Aug 13, 2022
be1413d
test: add redis test_plot
AnneYang720 Aug 13, 2022
096b303
test: add redis to test_find
AnneYang720 Aug 13, 2022
3d4f411
test: add redis to test_match
AnneYang720 Aug 13, 2022
a3144cb
fix: fix conflicts with main
AnneYang720 Aug 15, 2022
13e6b6c
Merge remote-tracking branch 'jina/main' into feat-redis-backend
AnneYang720 Aug 15, 2022
6949fe2
test: add redis to test_advance_indexing
AnneYang720 Aug 15, 2022
08d6644
feat: add _ensure_unique_config to redis
AnneYang720 Aug 15, 2022
a8f6eeb
fix: remove comments test_text
AnneYang720 Aug 17, 2022
efd052d
fix: remove useless debug output
AnneYang720 Aug 17, 2022
60b9526
refactor: simplify redis search command
AnneYang720 Aug 17, 2022
5da0d89
refractor: avoid using redis keys command
AnneYang720 Aug 17, 2022
0d32d68
refractor: remove useless check
AnneYang720 Aug 17, 2022
6faa2ab
refractor: clarify exception message
AnneYang720 Aug 18, 2022
cfbb543
feat: add index_name to redis config
AnneYang720 Aug 18, 2022
a91d2c5
fix: change redis find to mongo style
AnneYang720 Aug 18, 2022
8bc105a
refractor: config sequence
AnneYang720 Aug 18, 2022
8e89d14
test: remove comments
AnneYang720 Aug 18, 2022
e36ae39
fix: redis config index_name update
AnneYang720 Aug 18, 2022
f4b19b7
test: fix redis in test_advance_indexing
AnneYang720 Aug 19, 2022
aa2f8b2
test: fix redis in test_content
AnneYang720 Aug 19, 2022
e46174c
test: fix redis in test_empty
AnneYang720 Aug 19, 2022
634b62d
test: fix redis in test_find
AnneYang720 Aug 19, 2022
5ddaeb7
test: fix redis in test_magic
AnneYang720 Aug 19, 2022
57feb9b
test: fix redis in test_match
AnneYang720 Aug 19, 2022
cad75f7
feat: redis add subindex support
AnneYang720 Aug 19, 2022
75e7a90
test: add redis to sub_index related tests
AnneYang720 Aug 19, 2022
12a9985
Merge branch 'main' into feat-redis-backend
hanxiao Aug 21, 2022
61360d0
feat: change redis find to pre-filtering
AnneYang720 Aug 23, 2022
d4a82d1
Merge branch 'main' into feat-redis-backend
Aug 23, 2022
8a6168d
test: add category filter test for redis find
AnneYang720 Aug 23, 2022
7d3de6c
Merge branch 'main' into feat-redis-backend
Aug 23, 2022
4d0505f
refactor: using batch_docs in redis extend
AnneYang720 Aug 23, 2022
911b648
Merge branch 'feat-redis-backend' of github.com:AnneYang720/docarray …
AnneYang720 Aug 23, 2022
baeccd2
Merge branch 'main' into feat-redis-backend
Aug 24, 2022
c0a1f35
feat: add redis bool type support and tests
AnneYang720 Aug 24, 2022
b2f3a77
Merge branch 'feat-redis-backend' of github.com:AnneYang720/docarray …
AnneYang720 Aug 24, 2022
ddd1eba
refractor: add default values to redis config
AnneYang720 Aug 24, 2022
2d7c75c
Merge branch 'main' into feat-redis-backend
Aug 24, 2022
e85f1f7
refractor: remove useless comments
AnneYang720 Aug 24, 2022
53cbaa9
Merge branch 'feat-redis-backend' of github.com:AnneYang720/docarray …
AnneYang720 Aug 24, 2022
97bc99e
test: fix test_backend for redis
AnneYang720 Aug 24, 2022
3bba4b0
refractor: simplify key prefix
AnneYang720 Aug 24, 2022
c0f083f
test: add bool type test for redis
AnneYang720 Aug 24, 2022
582b56b
refeactor: add default value in redisconfig
AnneYang720 Aug 24, 2022
1e2682b
fix: keep kwargs for future potential use
AnneYang720 Aug 24, 2022
80cff7a
refractor: change bool type check
AnneYang720 Aug 24, 2022
549939a
refractor: specify redis version
AnneYang720 Aug 24, 2022
1fce045
feat: add _set_docs_by_ids for redis
AnneYang720 Aug 24, 2022
cfd9aa8
fix: fix redis set_doc_by_id(s)
AnneYang720 Aug 24, 2022
b718087
refractor: refract gc collect for redis
AnneYang720 Aug 24, 2022
c23f630
feat: add _get_docs_by_ids for redis
AnneYang720 Aug 25, 2022
4e1e933
Merge branch 'main' into feat-redis-backend
Aug 25, 2022
8dbc5ee
refractor: support find_by_text in future
AnneYang720 Aug 25, 2022
be3f14a
Merge branch 'feat-redis-backend' of github.com:AnneYang720/docarray …
AnneYang720 Aug 25, 2022
55a6c1c
feat: add doc.id to redis payload
AnneYang720 Aug 25, 2022
173066a
fix: remove find_text related
AnneYang720 Aug 25, 2022
59dc17f
doc: add doc for redis storage backend
AnneYang720 Aug 25, 2022
1dce140
fix: support find_text related in future
AnneYang720 Aug 25, 2022
4f5ff4a
refractor: change to $ne according to mongo
AnneYang720 Aug 25, 2022
e23e7ef
fix: remove _find_by_text related
AnneYang720 Aug 25, 2022
ac6352c
refractor: update _upload_batch
AnneYang720 Aug 25, 2022
5f8ff6f
test: update redis related tests
AnneYang720 Aug 25, 2022
e74bca8
docs: update redis doc
AnneYang720 Aug 25, 2022
73b6dbe
test: update test after removing text related
AnneYang720 Aug 25, 2022
be72851
docs: minor changes for redis doc
AnneYang720 Aug 26, 2022
fdd9462
docs: minor changes for redis doc
AnneYang720 Aug 26, 2022
0cf9618
Merge branch 'main' into feat-redis-backend
hanxiao Aug 26, 2022
8d0f251
docs: update redis doc
AnneYang720 Aug 26, 2022
fec9cbf
Merge branch 'feat-redis-backend' of github.com:AnneYang720/docarray …
AnneYang720 Aug 26, 2022
9063420
docs: fix redis doc
AnneYang720 Aug 26, 2022
fe800d8
docs: add host and port in example
AnneYang720 Aug 26, 2022
5f94757
Merge branch 'main' into feat-redis-backend
hanxiao Aug 26, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
test: remove comments
  • Loading branch information
AnneYang720 committed Aug 18, 2022
commit 8e89d146bbb8811f093452362c05560f7fdf205a
219 changes: 104 additions & 115 deletions tests/unit/array/test_advance_indexing.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,10 @@
import pytest

from docarray import DocumentArray, Document

# from docarray.array.storage.weaviate import WeaviateConfig
# from docarray.array.annlite import AnnliteConfig
# from docarray.array.qdrant import QdrantConfig
# from docarray.array.elastic import ElasticConfig
from docarray.array.storage.weaviate import WeaviateConfig
from docarray.array.annlite import AnnliteConfig
from docarray.array.qdrant import QdrantConfig
from docarray.array.elastic import ElasticConfig
from docarray.array.redis import RedisConfig
import gc

Expand All @@ -24,12 +23,12 @@ def indices():
@pytest.mark.parametrize(
'storage,config',
[
# ('memory', None),
# ('sqlite', None),
# ('weaviate', WeaviateConfig(n_dim=123)),
# ('annlite', AnnliteConfig(n_dim=123)),
# ('qdrant', QdrantConfig(n_dim=123)),
# ('elasticsearch', ElasticConfig(n_dim=123)),
('memory', None),
('sqlite', None),
('weaviate', WeaviateConfig(n_dim=123)),
('annlite', AnnliteConfig(n_dim=123)),
('qdrant', QdrantConfig(n_dim=123)),
('elasticsearch', ElasticConfig(n_dim=123)),
('redis', RedisConfig(n_dim=123, flush=True)),
],
)
Expand Down Expand Up @@ -58,11 +57,11 @@ def test_getter_int_str(docs, storage, config, start_storage):
@pytest.mark.parametrize(
'storage,config',
[
# ('memory', None),
# ('sqlite', None),
# ('weaviate', WeaviateConfig(n_dim=123)),
# ('annlite', AnnliteConfig(n_dim=123)),
# ('qdrant', QdrantConfig(n_dim=123)),
('memory', None),
('sqlite', None),
('weaviate', WeaviateConfig(n_dim=123)),
('annlite', AnnliteConfig(n_dim=123)),
('qdrant', QdrantConfig(n_dim=123)),
('redis', RedisConfig(n_dim=123, flush=True)),
],
)
Expand All @@ -87,12 +86,12 @@ def test_setter_int_str(docs, storage, config, start_storage):
@pytest.mark.parametrize(
'storage,config',
[
# ('memory', None),
# ('sqlite', None),
# ('weaviate', WeaviateConfig(n_dim=123)),
# ('annlite', AnnliteConfig(n_dim=123)),
# ('qdrant', QdrantConfig(n_dim=123)),
# ('elasticsearch', ElasticConfig(n_dim=123)),
('memory', None),
('sqlite', None),
('weaviate', WeaviateConfig(n_dim=123)),
('annlite', AnnliteConfig(n_dim=123)),
('qdrant', QdrantConfig(n_dim=123)),
('elasticsearch', ElasticConfig(n_dim=123)),
('redis', RedisConfig(n_dim=123, flush=True)),
],
)
Expand Down Expand Up @@ -122,12 +121,12 @@ def test_del_int_str(docs, storage, config, start_storage, indices):
@pytest.mark.parametrize(
'storage,config',
[
# ('memory', None),
# ('sqlite', None),
# ('weaviate', WeaviateConfig(n_dim=123)),
# ('annlite', AnnliteConfig(n_dim=123)),
# ('qdrant', QdrantConfig(n_dim=123)),
# ('elasticsearch', ElasticConfig(n_dim=123)),
('memory', None),
('sqlite', None),
('weaviate', WeaviateConfig(n_dim=123)),
('annlite', AnnliteConfig(n_dim=123)),
('qdrant', QdrantConfig(n_dim=123)),
('elasticsearch', ElasticConfig(n_dim=123)),
('redis', RedisConfig(n_dim=123, flush=True)),
],
)
Expand Down Expand Up @@ -161,12 +160,12 @@ def test_slice(docs, storage, config, start_storage):
@pytest.mark.parametrize(
'storage,config',
[
# ('memory', None),
# ('sqlite', None),
# ('weaviate', WeaviateConfig(n_dim=123)),
# ('annlite', AnnliteConfig(n_dim=123)),
# ('qdrant', QdrantConfig(n_dim=123)),
# ('elasticsearch', ElasticConfig(n_dim=123)),
('memory', None),
('sqlite', None),
('weaviate', WeaviateConfig(n_dim=123)),
('annlite', AnnliteConfig(n_dim=123)),
('qdrant', QdrantConfig(n_dim=123)),
('elasticsearch', ElasticConfig(n_dim=123)),
('redis', RedisConfig(n_dim=123, flush=True)),
],
)
Expand Down Expand Up @@ -208,12 +207,12 @@ def test_sequence_bool_index(docs, storage, config, start_storage):
@pytest.mark.parametrize(
'storage,config',
[
# ('memory', None),
# ('sqlite', None),
# ('weaviate', WeaviateConfig(n_dim=123)),
# ('annlite', AnnliteConfig(n_dim=123)),
# ('qdrant', QdrantConfig(n_dim=123)),
# ('elasticsearch', ElasticConfig(n_dim=123)),
('memory', None),
('sqlite', None),
('weaviate', WeaviateConfig(n_dim=123)),
('annlite', AnnliteConfig(n_dim=123)),
('qdrant', QdrantConfig(n_dim=123)),
('elasticsearch', ElasticConfig(n_dim=123)),
('redis', RedisConfig(n_dim=123, flush=True)),
],
)
Expand Down Expand Up @@ -245,12 +244,12 @@ def test_sequence_int(docs, nparray, storage, config, start_storage):
@pytest.mark.parametrize(
'storage,config',
[
# ('memory', None),
# ('sqlite', None),
# ('weaviate', WeaviateConfig(n_dim=123)),
# ('annlite', AnnliteConfig(n_dim=123)),
# ('qdrant', QdrantConfig(n_dim=123)),
# ('elasticsearch', ElasticConfig(n_dim=123)),
('memory', None),
('sqlite', None),
('weaviate', WeaviateConfig(n_dim=123)),
('annlite', AnnliteConfig(n_dim=123)),
('qdrant', QdrantConfig(n_dim=123)),
('elasticsearch', ElasticConfig(n_dim=123)),
('redis', RedisConfig(n_dim=123, flush=True)),
],
)
Expand Down Expand Up @@ -280,12 +279,12 @@ def test_sequence_str(docs, storage, config, start_storage):
@pytest.mark.parametrize(
'storage,config',
[
# ('memory', None),
# ('sqlite', None),
# ('weaviate', WeaviateConfig(n_dim=123)),
# ('annlite', AnnliteConfig(n_dim=123)),
# ('qdrant', QdrantConfig(n_dim=123)),
# ('elasticsearch', ElasticConfig(n_dim=123)),
('memory', None),
('sqlite', None),
('weaviate', WeaviateConfig(n_dim=123)),
('annlite', AnnliteConfig(n_dim=123)),
('qdrant', QdrantConfig(n_dim=123)),
('elasticsearch', ElasticConfig(n_dim=123)),
('redis', RedisConfig(n_dim=123, flush=True)),
],
)
Expand All @@ -301,12 +300,12 @@ def test_docarray_list_tuple(docs, storage, config, start_storage):
@pytest.mark.parametrize(
'storage,config',
[
# ('memory', None),
# ('sqlite', None),
# ('weaviate', WeaviateConfig(n_dim=123)),
# ('annlite', AnnliteConfig(n_dim=123)),
# ('qdrant', QdrantConfig(n_dim=123)),
# ('elasticsearch', ElasticConfig(n_dim=123)),
('memory', None),
('sqlite', None),
('weaviate', WeaviateConfig(n_dim=123)),
('annlite', AnnliteConfig(n_dim=123)),
('qdrant', QdrantConfig(n_dim=123)),
('elasticsearch', ElasticConfig(n_dim=123)),
('redis', RedisConfig(n_dim=123, flush=True)),
],
)
Expand Down Expand Up @@ -341,12 +340,12 @@ def test_path_syntax_indexing(storage, config, start_storage):
@pytest.mark.parametrize(
'storage,config',
[
# ('memory', None),
# ('sqlite', None),
# ('weaviate', WeaviateConfig(n_dim=123)),
# ('annlite', AnnliteConfig(n_dim=123)),
# ('qdrant', QdrantConfig(n_dim=123)),
# ('elasticsearch', ElasticConfig(n_dim=123)),
('memory', None),
('sqlite', None),
('weaviate', WeaviateConfig(n_dim=123)),
('annlite', AnnliteConfig(n_dim=123)),
('qdrant', QdrantConfig(n_dim=123)),
('elasticsearch', ElasticConfig(n_dim=123)),
('redis', RedisConfig(n_dim=123, flush=True)),
],
)
Expand Down Expand Up @@ -427,12 +426,12 @@ def test_path_syntax_indexing_set(storage, config, start_storage):
@pytest.mark.parametrize(
'storage,config_gen',
[
# ('memory', None),
# ('sqlite', None),
# ('weaviate', lambda: WeaviateConfig(n_dim=123)),
# ('annlite', lambda: AnnliteConfig(n_dim=123)),
# ('qdrant', lambda: QdrantConfig(n_dim=123)),
# ('elasticsearch', lambda: ElasticConfig(n_dim=123)),
('memory', None),
('sqlite', None),
('weaviate', lambda: WeaviateConfig(n_dim=123)),
('annlite', lambda: AnnliteConfig(n_dim=123)),
('qdrant', lambda: QdrantConfig(n_dim=123)),
('elasticsearch', lambda: ElasticConfig(n_dim=123)),
('redis', lambda: RedisConfig(n_dim=123, flush=True)),
],
)
Expand Down Expand Up @@ -465,10 +464,7 @@ def test_attribute_indexing(storage, config_gen, start_storage, size):

@pytest.mark.parametrize(
'storage',
[
# \'memory', 'sqlite', 'weaviate', 'annlite', 'qdrant', 'elasticsearch',
'redis'
],
['memory', 'sqlite', 'weaviate', 'annlite', 'qdrant', 'elasticsearch', 'redis'],
)
def test_tensor_attribute_selector(storage, start_storage):
import scipy.sparse
Expand Down Expand Up @@ -502,31 +498,28 @@ def test_tensor_attribute_selector(storage, start_storage):
assert isinstance(v1, list)


# # TODO: since match function is not implemented, this test will
# # not work with weaviate storage atm, will be addressed in
# # next version
# @pytest.mark.parametrize('storage', ['memory', 'sqlite', 'annlite'])
# def test_advance_selector_mixed(storage):
# if storage == 'annlite':
# da = DocumentArray(storage=storage, config={'n_dim': 3})
# else:
# da = DocumentArray(storage=storage)
# TODO: since match function is not implemented, this test will
# not work with weaviate storage atm, will be addressed in
# next version
@pytest.mark.parametrize('storage', ['memory', 'sqlite', 'annlite'])
def test_advance_selector_mixed(storage):
if storage == 'annlite':
da = DocumentArray(storage=storage, config={'n_dim': 3})
else:
da = DocumentArray(storage=storage)

# da.extend(DocumentArray.empty(10))
# da.embeddings = np.random.random([10, 3])
da.extend(DocumentArray.empty(10))
da.embeddings = np.random.random([10, 3])

# da.match(da, exclude_self=True)
da.match(da, exclude_self=True)

# assert len(da[:, ('id', 'embedding', 'matches')]) == 3
# assert len(da[:, ('id', 'embedding', 'matches')][0]) == 10
assert len(da[:, ('id', 'embedding', 'matches')]) == 3
assert len(da[:, ('id', 'embedding', 'matches')][0]) == 10


@pytest.mark.parametrize(
'storage',
[
# 'memory', 'sqlite', 'weaviate', 'annlite', 'qdrant', 'elasticsearch',
'redis'
],
['memory', 'sqlite', 'weaviate', 'annlite', 'qdrant', 'elasticsearch', 'redis'],
)
def test_single_boolean_and_padding(storage, start_storage):
if storage in ('annlite', 'weaviate', 'qdrant', 'elasticsearch', 'redis'):
Expand All @@ -549,19 +542,24 @@ def test_single_boolean_and_padding(storage, start_storage):
assert len(da[True, False, False]) == 1


@pytest.fixture()
def ensure_gc():
gc.collect()


@pytest.mark.parametrize(
'storage,config_gen',
[
# ('memory', None),
# ('sqlite', None),
# ('weaviate', lambda: WeaviateConfig(n_dim=123)),
# ('annlite', lambda: AnnliteConfig(n_dim=123)),
# ('qdrant', lambda: QdrantConfig(n_dim=123)),
# ('elasticsearch', lambda: ElasticConfig(n_dim=123)),
('memory', None),
('sqlite', None),
('weaviate', lambda: WeaviateConfig(n_dim=123)),
('annlite', lambda: AnnliteConfig(n_dim=123)),
('qdrant', lambda: QdrantConfig(n_dim=123)),
('elasticsearch', lambda: ElasticConfig(n_dim=123)),
('redis', lambda: RedisConfig(n_dim=123, flush=True)),
],
)
def test_edge_case_two_strings(storage, config_gen, start_storage):
def test_edge_case_two_strings(storage, config_gen, ensure_gc, start_storage):
# getitem
if config_gen:
da = DocumentArray(storage=storage, config=config_gen())
Expand Down Expand Up @@ -628,28 +626,22 @@ def test_edge_case_two_strings(storage, config_gen, start_storage):
da['1', 'hellohello'] = 'hello'

if storage == 'redis':
gc.collect()
ensure_gc
Comment thread
AnneYang720 marked this conversation as resolved.
Outdated


# TODO: since redis has flush, this test should be rewrite for redis
@pytest.mark.parametrize(
'storage,config',
[
# ('sqlite', None),
# ('weaviate', WeaviateConfig(n_dim=123)),
# ('annlite', AnnliteConfig(n_dim=123)),
# ('qdrant', QdrantConfig(n_dim=123)),
# ('elasticsearch', ElasticConfig(n_dim=123)),
('sqlite', None),
('weaviate', WeaviateConfig(n_dim=123)),
('annlite', AnnliteConfig(n_dim=123)),
('qdrant', QdrantConfig(n_dim=123)),
('elasticsearch', ElasticConfig(n_dim=123)),
('redis', RedisConfig(n_dim=123, flush=True)),
],
)
def test_offset2ids_persistence(storage, config, start_storage):
# config = RedisConfig(n_dim=123, flush=True)
# storage = 'redis'
if storage == 'redis':
da = DocumentArray(storage=storage, config=config)
else:
da = DocumentArray(storage=storage, config=config)
da = DocumentArray(storage=storage, config=config)

da.extend(
[
Expand All @@ -661,9 +653,6 @@ def test_offset2ids_persistence(storage, config, start_storage):
da.insert(1, Document(id='1'))
da.insert(3, Document(id='3'))

# print('aaa')
# print(da._offset2ids.ids)

config = da._config
da_ids = da[:, 'id']
assert da_ids == [str(i) for i in range(5)]
Expand Down