Esta página explica o esquema da tabela do BigQuery criada quando exporta metadados DICOM para o BigQuery.
Terminologia
Para compreender o esquema e os respetivos componentes, familiarize-se com a terminologia DICOM. Em particular, esta página usa vários termos encontrados em 3.10 DICOM Data Structures and Encoding Definitions.
Vista geral
A Cloud Healthcare API gera automaticamente o esquema do BigQuery com os dados que está a exportar e o dicionário DICOM. O esquema contém apenas colunas para elementos de dados DICOM que existem nos metadados. A única exceção é o nome da pessoa na RV.
Ao exportar metadados DICOM, a Cloud Healthcare API tenta exportar todos os elementos de dados nos metadados. Para obter informações sobre o que acontece se surgir um problema, consulte o artigo Tipos em conflito e com incompatibilidade.
Elementos de dados padrão e privados
O DICOM fornece elementos de dados padrão que estão em conformidade com uma especificação predefinida. Para ver uma lista destes elementos de dados, consulte o Registo de elementos de dados DICOM.
Nos casos em que tem de comunicar dados que não estão em conformidade com os elementos padrão, pode usar elementos de dados privados.
Elementos de dados padrão
Os seguintes comportamentos aplicam-se aos elementos de dados padrão. Para o comportamento dos elementos de dados privados, consulte Elementos de dados privados.
Nomes das colunas
As colunas no esquema do BigQuery gerado são denominadas de acordo com a palavra-chave do elemento de dados. Por exemplo, se os metadados DICOM contiverem um elemento de dados cuja palavra-chave seja InstanceCreationDate, o esquema gerado tem uma coluna correspondente denominada InstanceCreationDate.
Comportamento do elemento de dados DICOM padrão
A tabela seguinte mostra uma lista de representações de valores (VRs) e as respetivas abreviaturas. Para qualquer elemento de dados exportado para o BigQuery que contenha um destes VRs, o elemento de dados usa o tipo de dados do BigQuery encontrado em "Tipo de dados":
RV | Tipo de dados |
---|---|
|
String |
Data (DA) | Data |
Time (TM) | Hora |
Data/hora (DT) | Data/hora |
|
String |
Nome da pessoa (PN) | Struct (Record) |
|
Vírgula flutuante |
|
Inteiro |
Sequência de itens (SQ) | Struct (Record) |
Modos anuláveis e repetidos
Consoante o valor de multiplicidade (VM) de um elemento de dados, a respetiva coluna do BigQuery tem um de dois modos: NULLABLE
ou REPEATED
.
Se um elemento de dados tiver um valor de VM de 1, o que indica que o elemento de dados é único, o elemento de dados usa o modo NULLABLE
. Para qualquer outro valor de VM, o elemento de dados usa o modo REPEATED
.
Por exemplo, conforme mostrado no Registo de elementos de dados DICOM,
a palavra-chave SOPInstanceUID tem um valor VM de 1. Como resultado,
quando é exportado para o BigQuery, o respetivo modo é NULLABLE
,
e a respetiva representação na tabela tem o seguinte aspeto (quando representado como
JSON):
"SOPInstanceUID": "0.0.000.000000.0.000.0000.0000000.0000.0000000000.000",
Por outro lado, a palavra-chave ImageType tem um valor de VM de 2-n.
Como resultado, quando é exportado para o BigQuery, o respetivo modo é
REPEATED
e a respetiva representação na tabela tem o seguinte aspeto (quando
representado como JSON):
"ImageType": [
"ORIGINAL",
"PRIMARY",
"OTHER",
"..."
],
Registos de visualização excluídos
Os dados binários e de formato longo não são exportados para a tabela do BigQuery gerada, pelo que os elementos de dados que contêm os seguintes VRs não são exportados. Em alternativa,
os VRs seguintes são incluídos numa coluna separada (denominada
DroppedTags.TagName
) na tabela de destino do BigQuery.
- Outro duplo (OD)
- Outro flutuador (OF)
- Outro longo (OL)
- Outros bytes (OB)
- Outra palavra (OW)
- Desconhecido (UN)
- Etiquetas de sequência (SQ) que contêm mais de aproximadamente 1 MiB de dados
- Attribute (AT), Floating Point Double (FD), Floating Point Single (FL),
Unsigned Long (UL) ou Unsigned Short (US), se a Value Multiplicity (VM) for
superior a 512.
- Por motivos de compatibilidade com versões anteriores, as etiquetas de instâncias já carregadas na Cloud Healthcare API podem ser incluídas na coluna
DroppedTags.TagName
se a multiplicidade de valores for superior a 64.
- Por motivos de compatibilidade com versões anteriores, as etiquetas de instâncias já carregadas na Cloud Healthcare API podem ser incluídas na coluna
Person Name VR
Cada coluna no esquema do BigQuery com um VR de nome de pessoa (PN) contém sempre três subcolunas, independentemente de as subcolunas conterem dados. As três subcolunas são:
- Alfabético
- Ideográfico
- Fonética
Cada uma das três subcolunas tem as suas próprias cinco subcolunas:
- FamilyName
- GivenName
- MiddleName
- NamePrefix
- NameSuffix
Por exemplo, considere a etiqueta pública "OperatorsName (0008,1070)", que tem um VR de Person Name (PN). Suponhamos que o valor de OperatorsName é "Darcy Smith". O esquema vai conter uma coluna OperatorsName com as subcolunas indicadas anteriormente, mas apenas Alphabetic.FamilyName (Smith) e Alphabetic.GivenName (Darcy) vão conter valores.
Elementos de dados privados
Algumas implementações clínicas podem exigir que armazene dados personalizados que não se enquadram na estrutura dos elementos de dados públicos. Em alternativa, pode usar elementos de dados privados.
Os elementos de dados privados com um VR de SQ (Sequence of Items) têm o mesmo comportamento que os elementos de dados padrão. Os elementos de dados privados com um VR de SQ são denominados sequências de dados privados.
Os elementos de dados privados que não têm um VR de SQ estão aninhados numa coluna denominada OtherElements
e são convertidos em strings. Estes elementos de dados privados são denominados dados privados não sequenciais. Para consultar elementos de dados privados que não sejam de sequência, a consulta tem de pesquisar na coluna OtherElements
do elemento.
A coluna OtherElements
contém duas subcolunas: "Dados" e "Etiqueta". A coluna de dados é a representação de string do valor do elemento de dados privado.
É sempre do tipo REPEATED
. A coluna Etiqueta usa o formato "Tag_HEX", em que HEX é uma string hexadecimal do número da etiqueta.
Colunas LastUpdated
e Type
As colunas LastUpdated
e Type
são adicionadas à tabela do BigQuery criada quando exporta metadados DICOM. Estas colunas não são elementos de dados padrão
nem privados e não correspondem ao registo de
elementos de dados DICOM.
O comportamento destas colunas é o seguinte:
- A coluna
LastUpdated
contém um valor de data/hora que mostra quando a instância DICOM foi inserida ou eliminada do arquivo DICOM. - A coluna
Type
contém uma string que mostra o tipo de operação que ocorreu. Os valores possíveis sãoCREATE
ouDELETE
.
Tipos em conflito e com incompatibilidade
Se ocorrer um conflito de tipo, como quando uma etiqueta pública é usada com um tipo incorreto, a etiqueta pública é tratada como se fosse uma etiqueta privada. O valor do elemento de dados está aninhado numa coluna denominada OtherElements
e o valor é convertido numa string.
Por exemplo, suponhamos que os metadados DICOM contêm uma etiqueta com:
- Um número de etiqueta "(4010,1017)"
- Um RV de SL (Signed Long)
- Um valor de 32
(4010,1017) é o mesmo número de etiqueta que "Massa", que é um nome de etiqueta público na especificação DICOM que tem um VR de FL. A operação de exportação espera que um elemento de dados com o número de etiqueta de "(4010,1017)" seja o nome da etiqueta pública "Massa" com um VR de FL. Por conseguinte, a operação de exportação espera converter o valor do elemento de dados num número de vírgula flutuante (como mostrado na tabela em Comportamento padrão do elemento de dados DICOM
Ocorre um conflito de tipos porque todas as etiquetas com um VR de SL usam o tipo de dados integer. Por conseguinte, a etiqueta é convertida numa etiqueta privada e adicionada à coluna OtherElements
.
Se for usado um nome de etiqueta pública não sequencial para dados de sequência, ocorre uma incompatibilidade de tipo. Como resultado, a sequência é tratada como se fosse um elemento de dados privado. Em vez de usar o nome da etiqueta pública como o nome da coluna no esquema do BigQuery, é usado o número hexadecimal do nome da etiqueta pública. O número hexadecimal é do tipo string.
Exemplos: consultar elementos de dados públicos e privados
Considere o seguinte fragmento de um esquema representado como JSON. O esquema foi criado após a exportação de dados DICOM para o BigQuery.
[
...
{
"name": "SOPInstanceUID",
"type": "STRING"
},
{
"fields": [
{
"fields": [
{
"mode": "REQUIRED",
"name": "Tag",
"type": "STRING"
},
{
"mode": "REPEATED",
"name": "Data",
"type": "STRING"
}
],
"mode": "REPEATED",
"name": "OtherElements",
"type": "RECORD"
}
],
"mode": "REPEATED",
"name": "Tag_12345678",
"type": "RECORD"
}
...
]
O exemplo seguinte mostra como consultar o elemento de dados públicos SOPInstanceUID
.
Para aceder ao valor da coluna, execute a seguinte consulta:
#standardSQL SELECT SOPInstanceUID FROM `PROJECT_ID.DATASET_ID.TABLE_ID`
A execução da consulta devolve um resultado semelhante ao seguinte:
[ ... { "SOPInstanceUID": "0.0.000.000000.0.000.0000.0000000.0000.0000000000.000" }, ... ]
O exemplo seguinte mostra como consultar dados privados não sequenciais.
Execute a seguinte consulta na coluna OtherElements
, que se encontra na coluna Tag_12345678
. Tenha em atenção a utilização do operador UNNEST
, que é obrigatório porque está a consultar um RECORD
.
#standardSQL SELECT Tag_12345678.OtherElements AS OtherElements FROM `PROJECT_ID.DATASET_ID.TABLE_ID`, UNNEST(Tag_12345678) AS Tag_12345678
A execução da consulta devolve um resultado semelhante ao seguinte, consoante a quantidade e o tipo de dados na coluna Tag_12345678.OtherElements
:
[ { "OtherElements": [ { "Tag": "Tag_12345678", "Data": [ "DATA" ] } ] }, { "OtherElements": [ { "Tag": "Tag_12345678", "Data": [ "DATA" ] } ] }, { "OtherElements": [ { "Tag": "Tag_12345678", "Data": [ "DATA" ] } ] } ]
O que se segue?
Saiba mais sobre as operações do SQL padrão do BigQuery e veja exemplos.