()
| 700 | |
| 701 | |
| 702 | def test_partitioning(): |
| 703 | schema = pa.schema([ |
| 704 | pa.field('i64', pa.int64()), |
| 705 | pa.field('f64', pa.float64()) |
| 706 | ]) |
| 707 | for klass in [ds.DirectoryPartitioning, ds.HivePartitioning, |
| 708 | ds.FilenamePartitioning]: |
| 709 | partitioning = klass(schema) |
| 710 | assert isinstance(partitioning, ds.Partitioning) |
| 711 | assert partitioning == klass(schema) |
| 712 | assert partitioning != "other object" |
| 713 | |
| 714 | schema = pa.schema([ |
| 715 | pa.field('group', pa.int64()), |
| 716 | pa.field('key', pa.float64()) |
| 717 | ]) |
| 718 | partitioning = ds.DirectoryPartitioning(schema) |
| 719 | assert len(partitioning.dictionaries) == 2 |
| 720 | assert all(x is None for x in partitioning.dictionaries) |
| 721 | expr = partitioning.parse('/3/3.14/') |
| 722 | assert isinstance(expr, ds.Expression) |
| 723 | |
| 724 | expected = (ds.field('group') == 3) & (ds.field('key') == 3.14) |
| 725 | assert expr.equals(expected) |
| 726 | |
| 727 | with pytest.raises(pa.ArrowInvalid): |
| 728 | partitioning.parse('/prefix/3/aaa') |
| 729 | |
| 730 | expr = partitioning.parse('/3/') |
| 731 | expected = ds.field('group') == 3 |
| 732 | assert expr.equals(expected) |
| 733 | |
| 734 | assert partitioning != ds.DirectoryPartitioning(schema, segment_encoding="none") |
| 735 | |
| 736 | schema = pa.schema([ |
| 737 | pa.field('alpha', pa.int64()), |
| 738 | pa.field('beta', pa.int64()) |
| 739 | ]) |
| 740 | partitioning = ds.HivePartitioning(schema, null_fallback='xyz') |
| 741 | assert len(partitioning.dictionaries) == 2 |
| 742 | assert all(x is None for x in partitioning.dictionaries) |
| 743 | expr = partitioning.parse('/alpha=0/beta=3/') |
| 744 | expected = ( |
| 745 | (ds.field('alpha') == ds.scalar(0)) & |
| 746 | (ds.field('beta') == ds.scalar(3)) |
| 747 | ) |
| 748 | assert expr.equals(expected) |
| 749 | |
| 750 | expr = partitioning.parse('/alpha=xyz/beta=3/') |
| 751 | expected = ( |
| 752 | (ds.field('alpha').is_null() & (ds.field('beta') == ds.scalar(3))) |
| 753 | ) |
| 754 | assert expr.equals(expected) |
| 755 | |
| 756 | for shouldfail in ['/alpha=one/beta=2/', '/alpha=one/', '/beta=two/']: |
| 757 | with pytest.raises(pa.ArrowInvalid): |
| 758 | partitioning.parse(shouldfail) |
| 759 |
nothing calls this directly
no test coverage detected