Política de criação de partições
A política de criação de partições define se e como as extensões (partições horizontais de dados) devem ser particionadas para uma tabela específica ou uma vista materializada.
A política aciona um processo em segundo plano adicional que ocorre após a criação de extensões, após a ingestão de dados. Este processo inclui a reposição de dados das extensões de origem e a produção de extensões homogéneas , nas quais todos os valores da coluna designada como chave de partição residem numa única partição.
O principal objetivo da política de criação de partições é melhorar o desempenho das consultas em cenários suportados específicos.
Nota
Por predefinição, quando uma política de criação de partições de dados não está definida (é null
), as extensões são particionadas por hora de criação (ingestão). Na maioria dos casos, não é necessário definir uma política de criação de partições de dados.
Cenários suportados
Seguem-se os únicos cenários em que é recomendada a definição de uma política de criação de partições de dados. Em todos os outros cenários, a definição da política não é aconselhada.
- Filtros frequentes numa cardinalidade
string
guid
ou coluna média ou alta:- Por exemplo: soluções multi-inquilino ou uma tabela de métricas onde a maioria ou todas as consultas filtram numa coluna do tipo
string
ou , como ouTenantId
.MetricId
guid
- A cardinalidade média é, pelo menos, 10 000 valores distintos.
- Defina a chave de partição hash como a
string
coluna ouguid
e defina aPartitionAssigmentMode
propriedade comouniform
.
- Por exemplo: soluções multi-inquilino ou uma tabela de métricas onde a maioria ou todas as consultas filtram numa coluna do tipo
- Agregações frequentes ou associações numa cardinalidade
string
ouguid
coluna elevada:- Por exemplo, informações de IoT de muitos sensores diferentes ou registos académicos de muitos estudantes diferentes.
- A cardinalidade elevada é, pelo menos, 1000 000 valores distintos, em que a distribuição de valores na coluna é aproximadamente igual.
- Neste caso, defina a chave de partição hash para ser a coluna frequentemente agrupada ou associada e defina a propriedade
PartitionAssigmentMode
comoByPartition
.
- Ingestão de dados fora de ordem:
- Os dados ingeridos numa tabela podem não ser ordenados e particionados em extensões (partições horizontais) de acordo com uma coluna específica
datetime
que representa o tempo de criação de dados e é normalmente utilizado para filtrar dados. Tal pode dever-se a um backfill de ficheiros de origem heterogéneos que incluem valores datetime durante um grande intervalo de tempo. - Neste caso, defina a chave de partição datetime do intervalo uniforme como a
datetime
coluna. - Se precisar de políticas de retenção e colocação em cache para alinhar com os valores datetime na coluna, em vez de alinhar com a hora da ingestão, defina a
OverrideCreationTime
propriedade comotrue
.
- Os dados ingeridos numa tabela podem não ser ordenados e particionados em extensões (partições horizontais) de acordo com uma coluna específica
Atenção
- Não existem limites hard-coded definidos no número de tabelas com a política de criação de partições definida. No entanto, cada tabela adicional adiciona overhead ao processo de criação de partições de dados em segundo plano que é executado nos nós do cluster. Definir uma política em mais tabelas resultará na utilização de mais recursos de cluster e num custo mais elevado devido às transações de armazenamento subjacentes. Para obter mais informações, veja Capacidade.
- Não é recomendado definir uma política de criação de partições se o tamanho comprimido dos dados por partição for inferior a 1 GB.
- O processo de criação de partições resulta em artefactos de armazenamento residuais para todas as extensões substituídas durante o processo de criação de partições e durante o processo de intercalação. Espera-se que a maioria dos artefactos de armazenamento residuais sejam eliminados durante o processo de limpeza automática. Aumentar o valor da
MaxPartitionCount
propriedade aumenta o número de artefactos de armazenamento residuais e pode reduzir o desempenho da limpeza. - Antes de aplicar uma política de criação de partições numa vista materializada, reveja as recomendações para a política de criação de partições de vistas materializadas.
Chaves de partição
São suportados os seguintes tipos de chaves de partição.
Tipo | Tipo de Coluna | Propriedades da partição | Valor da partição |
---|---|---|---|
Hash | string ou guid |
Function , MaxPartitionCount , Seed , PartitionAssignmentMode |
Function (ColumnName , MaxPartitionCount , Seed ) |
Intervalo uniforme | datetime |
RangeSize , Reference , OverrideCreationTime |
bin_at (ColumnName , RangeSize , Reference ) |
Chave de partição hash
Se a política incluir uma chave de partição de hash, todas as extensões homogéneas que pertencem à mesma partição serão atribuídas ao mesmo nó de dados no cluster.
Nota
A operação de criação de partições de dados adiciona uma carga de processamento significativa. Recomendamos que aplique uma chave de partição hash numa tabela apenas nas seguintes condições:
- Se a maioria das consultas utilizar filtros de igualdade (
==
,in()
). - A maioria das consultas agrega/associa numa coluna específica do tipo
string
ouguid
que é de grande dimensão (cardinalidade de 10 M ou superior), como ,device_ID
ouuser_ID
. - O padrão de utilização das tabelas particionadas está numa carga de consulta de elevada simultaneidade, como na monitorização ou no dashboard de aplicações.
- É utilizada uma função hash-módulo para particionar os dados.
- Os dados em extensões homogéneas (particionadas) são ordenados pela chave de partição hash.
- Não precisará de incluir a chave de partição hash na política de ordenação as linhas se for definida alguma na tabela.
- Espera-se que as consultas que utilizam a estratégia aleatória e, nas quais a
shuffle key
utilizada emjoin
,summarize
oumake-series
seja a chave de partição hash da tabela, funcionem melhor porque a quantidade de dados necessários a mover através dos nós do cluster é reduzida.
Propriedades da partição
Propriedade | Descrição | Valores suportados | Valor recomendado |
---|---|---|---|
Function |
O nome de uma função hash-módulo a utilizar. | XxHash64 |
|
MaxPartitionCount |
O número máximo de partições a criar (o argumento módulo para a função hash-módulo) por período de tempo. | No intervalo (1,2048] . |
Os valores mais elevados levam a uma maior sobrecarga do processo de criação de partições de dados nos nós do cluster e a um maior número de extensões para cada período de tempo. O valor recomendado é 128 . Os valores mais elevados aumentarão significativamente a sobrecarga da criação de partições dos dados após a ingestão de dados e o tamanho dos metadados, pelo que não são recomendados. |
Seed |
Utilize para o valor hash ser aleatório. | Um número inteiro positivo. | 1 , que também é o valor predefinido. |
PartitionAssignmentMode |
O modo utilizado para atribuir partições a nós no cluster. | ByPartition : todas as extensões homogéneas (particionadas) que pertencem à mesma partição são atribuídas ao mesmo nó. Uniform : os valores de partição de uma extensão são ignorados. As extensões são atribuídas uniformemente aos nós do cluster. |
Se as consultas não forem associadas ou agregadas na chave de partição hash, utilize Uniform . Caso contrário, utilize ByPartition . |
Exemplo de chave de partição hash
Uma chave de partição hash sobre uma coluna te tipo string
chamada tenant_id
.
Utiliza a função hash XxHash64
, com MaxPartitionCount
definido como o valor 128
recomendado e o Seed
predefinido de 1
.
{
"ColumnName": "tenant_id",
"Kind": "Hash",
"Properties": {
"Function": "XxHash64",
"MaxPartitionCount": 128,
"Seed": 1,
"PartitionAssignmentMode": "Uniform"
}
}
Chave de partição datetime de intervalo uniforme
Nota
Aplicar apenas uma chave de partição datetime de intervalo uniforme numa datetime
coluna -typed numa tabela quando é pouco provável que os dados ingeridos na tabela sejam ordenados de acordo com esta coluna.
Nestes casos, pode remodelar os dados entre extensões para que cada extensão inclua registos de um intervalo de tempo limitado. Este processo faz com que os filtros na datetime
coluna sejam mais eficazes no momento da consulta.
A função de partição utilizada é bin_at() e não é personalizável.
Propriedades da partição
Propriedade | Descrição | Valor recomendado |
---|---|---|
RangeSize |
Uma timespan constante escalar que indica o tamanho de cada partição datetime. |
Comece com o valor 1.00:00:00 (um dia). Não defina um valor mais curto, porque pode fazer com que a tabela tenha um grande número de pequenas extensões que não podem ser intercaladas. |
Reference |
Uma datetime constante escalar que indica um ponto fixo no tempo, de acordo com o qual as partições datetime estão alinhadas. |
Comece com 1970-01-01 00:00:00 . Se existirem registos em que a chave de partição datetime tem null valores, o valor da partição é definido como o valor de Reference . |
OverrideCreationTime |
Um bool que indica se os tempos mínimos e máximos de criação da extensão do resultado devem ou não ser substituídos pelo intervalo dos valores na chave de partição. |
A predefinição é false . Definido como true se os dados não forem ingeridos por ordem de hora de chegada. Por exemplo, um único ficheiro de origem pode incluir valores datetime distantes e/ou pode querer impor retenção ou colocação em cache com base nos valores datetime em vez da hora da ingestão.Quando OverrideCreationTime está definido como true , as extensões podem ser perdidas no processo de intercalação. As extensões são perdidas se o tempo de criação for superior ao Lookback período da política de intercalação Extensões da tabela. Para se certificar de que as extensões são detetáveis, defina a Lookback propriedade como HotCache . |
Exemplo de partição datetime do intervalo uniforme
O fragmento mostra uma chave de partição de intervalo de datetime uniforme sobre uma datetime
coluna com o nome timestamp
.
datetime(2021-01-01)
Utiliza como ponto de referência, com um tamanho de 7d
para cada partição e não substitui os tempos de criação das extensões.
{
"ColumnName": "timestamp",
"Kind": "UniformRange",
"Properties": {
"Reference": "2021-01-01T00:00:00",
"RangeSize": "7.00:00:00",
"OverrideCreationTime": false
}
}
O objeto de política
Por predefinição, a política de criação de partições de dados de uma tabela é null
, caso em que os dados na tabela não serão reparticionados depois de ingeridos.
A política de criação de partições de dados tem as seguintes propriedades principais:
PartitionKeys:
- Uma coleção de chaves de partição que definem como particionar os dados na tabela.
- Uma tabela pode ter até
2
chaves de partição, com uma das seguintes opções: - Cada chave de partição tem as seguintes propriedades:
ColumnName
:string
– o nome da coluna de acordo com o qual os dados serão particionados.Kind
:string
- O tipo de criação de partições de dados a aplicar (Hash
ouUniformRange
).Properties
:property bag
- Define os parâmetros de acordo com os quais a criação de partições é efetuada.
EffectiveDateTime:
- O datetime UTC a partir do qual a política é eficaz.
- Esta propriedade é opcional. Se não for especificado, a política entrará em vigor para os dados ingeridos após a aplicação da política.
Atenção
- Pode definir um valor datetime no passado e partição de dados já ingeridos. No entanto, esta prática pode aumentar significativamente os recursos utilizados no processo de criação de partições.
- Na maioria dos casos, recomenda-se ter apenas dados ingeridos recentemente particionados e evitar a criação de partições de grandes quantidades de dados históricos.
- Se optar por criar partições de dados históricos, considere fazê-lo gradualmente ao definir o EffectiveDateTime para um anterior
datetime
em passos de até alguns dias sempre que alterar a política.
Exemplo de criação de partições de dados
Objeto de política de criação de partições de dados com duas chaves de partição.
- Uma chave de partição hash sobre uma coluna te tipo
string
chamadatenant_id
.- Utiliza a função hash
XxHash64
, comMaxPartitionCount
definido como o valor128
recomendado e oSeed
predefinido de1
.
- Utiliza a função hash
- Uma chave de partição de intervalo de datetime uniforme sobre uma
datetime
coluna de tipo com o nometimestamp
.datetime(2021-01-01)
Utiliza como ponto de referência, com um tamanho de7d
para cada partição.
{
"PartitionKeys": [
{
"ColumnName": "tenant_id",
"Kind": "Hash",
"Properties": {
"Function": "XxHash64",
"MaxPartitionCount": 128,
"Seed": 1,
"PartitionAssignmentMode": "Uniform"
}
},
{
"ColumnName": "timestamp",
"Kind": "UniformRange",
"Properties": {
"Reference": "2021-01-01T00:00:00",
"RangeSize": "7.00:00:00",
"OverrideCreationTime": false
}
}
]
}
Propriedades adicionais
As seguintes propriedades podem ser definidas como parte da política. Estas propriedades são opcionais e recomendamos que não as altere.
Propriedade | Descrição | Valor recomendado | Valor predefinido |
---|---|---|---|
MinRowCountPerOperation | Destino mínimo para a soma da contagem de linhas das extensões de origem de uma única operação de criação de partições de dados. | 0 |
|
MaxRowCountPerOperation | Destino máximo para a soma da contagem de linhas das extensões de origem de uma única operação de criação de partições de dados. | Defina um valor inferior a 5M se vir que as operações de criação de partições consomem uma grande quantidade de memória ou CPU por operação. | 0 , com um destino predefinido de 5000 000 registos. |
MaxOriginalSizePerOperation | Destino máximo para a soma do tamanho original (em bytes) das extensões de origem de uma única operação de criação de partições de dados. | Se as operações de criação de partições consumirem uma grande quantidade de memória ou CPU por operação, defina um valor inferior a 5 GB. | 0 , com um destino predefinido de 5.368.709.120 bytes (5 GB). |
O processo de criação de partições de dados
- A criação de partições de dados é executada como um processo em segundo plano pós-ingestão no cluster.
- Espera-se que uma tabela que é continuamente ingerida em tenha sempre uma "cauda" de dados que ainda está por particionar (extensões nonhomogéneas).
- A criação de partições de dados é executada apenas em extensões frequentes, independentemente do valor da
EffectiveDateTime
propriedade na política.- Se forem necessárias extensões frias de criação de partições, terá de ajustar temporariamente a política de colocação em cache.
Pode monitorizar o estado de criação de partições de tabelas com políticas definidas numa base de dados através do comando .show database extents partitioning statistics (.show database extents partitioning statistics ).
Capacidade de criação de partições
- O processo de criação de partições de dados resulta na criação de mais extensões. O cluster pode aumentar gradualmente a capacidade de intercalação de extensões, para que o processo de intercalação possa manter-se.
- Se existir um débito de ingestão elevado ou um número suficientemente grande de tabelas com uma política de criação de partições definida, o cluster poderá aumentar gradualmente a capacidade de partição Extensões, para que o processo de extensões de criação de partições possa manter-se.
- Para evitar consumir demasiados recursos, estes aumentos dinâmicos são limitados. Poderá ser necessário auscá-los gradualmente e linearmente para além da tampa, se estiverem totalmente utilizados.
- Se aumentar as capacidades causar um aumento significativo na utilização dos recursos do cluster, pode aumentar/ verticalmente ocluster, quer manualmente, quer ao ativar o dimensionamento automático.
Limitações
- As tentativas de partição de dados numa base de dados que já tenha mais de 5000 000 extensões serão limitadas.
- Nesses casos, a
EffectiveDateTime
propriedade das políticas de criação de partições de tabelas na base de dados será automaticamente adiada por várias horas, para que possa reavaliar a configuração e as políticas.
- Nesses casos, a
Valores atípicos em colunas particionadas
- As seguintes situações podem contribuir para a distribuição desequilibrada de dados nos nós do cluster e para degradar o desempenho das consultas:
- Se uma chave de partição hash incluir valores muito mais predominantes do que outros, por exemplo, uma cadeia vazia ou um valor genérico (como
null
ouN/A
). - Os valores representam uma entidade (como
tenant_id
) que é mais predominante no conjunto de dados.
- Se uma chave de partição hash incluir valores muito mais predominantes do que outros, por exemplo, uma cadeia vazia ou um valor genérico (como
- Se uma chave de partição datetime de intervalo uniforme tiver uma percentagem suficientemente grande de valores que estão "longe" da maioria dos valores na coluna, a sobrecarga do processo de criação de partições de dados é aumentada e poderá levar a muitas pequenas extensões que o cluster terá de controlar. Um exemplo de tal situação são os valores datetime do passado ou futuro distantes.
Em ambos os casos, "corrija" os dados ou filtre quaisquer registos irrelevantes nos dados antes ou no momento da ingestão, para reduzir a sobrecarga da criação de partições de dados no cluster. Por exemplo, utilize uma política de atualização.
Conteúdo relacionado
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários