1. A method comprising: receiving a plurality of keys from a particular body of data; wherein each key of the plurality of keys comprises a plurality of elements; populating a trie, which comprises nodes corresponding to values of elements of the plurality of keys, to produce a populated trie; wherein populating the trie comprises, as each given key of the plurality of keys is received, incrementing a count value of a node of the trie that corresponds to at least a subset of the plurality of elements of the given key; while populating the trie: determining that a particular count value of a particular node of the trie exceeds a predetermined threshold value, wherein the particular node of the trie is located at a depth that is less than a maximum depth of the nodes of the trie, and in response to determining that the particular count value of the particular node of the trie exceeds the predetermined threshold value, adding one or more child nodes to the particular node in the trie; and determining a plurality of data partitions, for the particular body of data, based on traversal of the populated trie comprising: assigning, to a particular data partition of the plurality of data partitions, one or more nodes of the trie, wherein at least one node, of the one or more nodes, represents a subtree of the trie, wherein the subtree of the trie comprises two or more nodes of the trie, and wherein, for each given data partition of the plurality of data partitions, the respective one or more nodes assigned to the given data partition define a range of keys, from the particular body of data, that fall within the given data partition; wherein the method is performed by one or more computing devices.