Formato de dados de carga do Gremlin
Para carregar dados Apache TinkerPop Gremlin usando o formato CSV, você deve especificar os vértices e os pontos em arquivos separados.
O carregador pode carregar vários arquivos de vértice e vários arquivos de ponto em um único trabalho de carga.
Para cada comando de carga, o conjunto de arquivos a serem carregados deve estar na mesma pasta no bucket do Amazon S3 e você deve especificar o nome da pasta para o parâmetro source. Os nomes dos arquivos e as extensões dos nomes dos arquivos não são importantes.
O formato CSV do Amazon Neptune segue a especificação RFC 4180 CSV. Para obter mais informações consulte Formato comum e tipo MIME para arquivos CSV
nota
Todos os arquivos devem ser codificados em formato UTF-8.
Cada arquivo tem uma linha de cabeçalho separada por vírgula. A linha de cabeçalho consiste nos cabeçalhos da coluna do sistema e nos cabeçalhos da coluna de propriedade.
Cabeçalhos de colunas do sistema
Os cabeçalhos da coluna do sistema exigidos e permitidos são diferentes para arquivos de vértice e arquivos de ponto.
Cada coluna do sistema pode aparecer apenas uma vez em um cabeçalho.
Todos os rótulos diferenciam maiúsculas de minúsculas.
Cabeçalhos de vértice
-
~id- ObrigatóriaUm ID para o vértice.
-
~labelUm rótulo para o vértice. Vários valores de rótulo são permitidos, separados por ponto e vírgula (
;).Se
~labelnão estiver presente, o TinkerPop fornecerá um rótulo com o valorvertex, porque todos os vértices devem ter pelo menos um rótulo.
Cabeçalhos de ponto
-
~id- ObrigatóriaUm ID para o ponto.
-
~from- ObrigatóriaO ID do vértice do vértice de.
-
~to- ObrigatóriaO ID do vértice do vértice para.
-
~labelUm rótulo para o ponto. Os pontos podem ter apenas um único rótulo.
Se
~labelnão estiver presente, o TinkerPop fornecerá um rótulo com o valoredge, porque todas as bordas devem ter pelo menos um rótulo.
Cabeçalhos de coluna de propriedade
É possível especificar uma coluna (:) para uma propriedade usando a sintaxe a seguir. Os nomes dos tipos não diferenciam maiúsculas de minúsculas. No entanto, observe que, se houver o caractere de dois pontos no nome de uma propriedade, ele deverá ser precedido por uma barra invertida como caractere de escape: \:
propertyname:type
nota
Espaços, vírgulas, caracteres de retorno e de nova linha não são permitidos nos cabeçalhos de coluna, portanto, os nomes de propriedades não podem incluir esses caracteres.
Você pode especificar uma coluna para um tipo de matriz adicionando [] para o tipo:
propertyname:type[]
nota
As propriedades de borda podem ter apenas um único valor e causarão um erro se um tipo de matriz é especificado ou um segundo valor é especificado.
O exemplo a seguir mostra o cabeçalho da coluna de uma propriedade denominada age do tipo Int.
age:Int
Cada linha no arquivo precisa ter um número inteiro nessa posição ou ser deixada em branco.
Matrizes de strings são permitidas, mas as strings em uma matriz não podem incluir o caractere ponto e vírgula (;), a menos que ele tenha uma barra invertida como caractere de escape (como este: \;).
Especificar a cardinalidade de uma coluna
A partir de Versão 1.0.1.0.200366.0 (26/07/2019), o cabeçalho da coluna pode ser usado para especificar a cardinalidade da propriedade identificada pela coluna. Isso permite que o carregador em massa use a cardinalidade de forma semelhante à forma como as consultas do Gremlin fazem.
Você especifica a cardinalidade de uma coluna da seguinte forma:
propertyname:type(cardinality)
O valor de cardinalidade pode ser single ou set. O padrão é set, o que significa que a coluna pode aceitar vários valores. No caso de arquivos de ponto, a cardinalidade é sempre única e especificar qualquer outra cardinalidade faz com que o carregador gere uma exceção.
Se a cardinalidade for single, o carregador lançará um erro se um valor anterior já estiver presente quando um valor for carregado, ou se vários valores forem carregados. Esse comportamento pode ser substituído para que um valor existente seja substituído quando um novo valor é carregado usando o sinalizador updateSingleCardinalityProperties. Consulte Comando Loader.
É possível usar uma configuração de cardinalidade com um tipo de matriz, embora isso não seja geralmente necessário. Estas são as combinações possíveis:
name:type: a cardinalidade éset, e o conteúdo é um único valor.name:type[]: a cardinalidade éset, e o conteúdo são vários valores.name:type(single): a cardinalidade ésingle, e o conteúdo é um único valor.name:type(set): a cardinalidade éset, equivalente ao padrão, e o conteúdo é um único valor.name:type(set)[]: a cardinalidade éset, e o conteúdo são vários valores.name:type(single)[]: isso é contraditório e gera um erro.
A seção a seguir lista todos os tipos de dados do Gremlin disponíveis.
Tipos de dados do Gremlin
Esta é uma lista dos tipos de propriedade permitidos, com uma descrição de cada tipo.
Bool (ou booliano)
Indica um campo booliano. Valores permitidos: false, true
nota
Qualquer valor diferente de true será tratado como falso.
Tipos de número inteiro
Os valores fora dos intervalos definidos resultam em um erro.
| Tipo | Intervalo |
|---|---|
| Byte | -128 to 127 |
| Short | -32768 to 32767 |
| Int | -2^31 to 2^31-1 |
| Long | -2^63 to 2^63-1 |
Tipos de número decimal
Compatíveis com a notação decimal ou com a notação científica. Também permite símbolos, como (+/-) Infinity ou NaN. INF não é compatível.
| Tipo | Intervalo |
|---|---|
| Float | 32-bit IEEE 754 floating point |
| Double | 64-bit IEEE 754 floating point |
Valores flutuantes e duplos que são muito longos são carregados e arredondados para a precisão do valor mais próximo de 24 bits (flutuante) e 53 bits (duplo). Um valor intermediário é arredondado para zero para os últimos dígitos restantes no nível de bits.
String
Aspas são opcionais. Os caracteres de vírgulas, nova linha e retorno de carro serão escapados automaticamente se forem incluídos em uma sequência entre aspas duplas ("). Exemplo: "Hello,
World"
Para incluir aspas em uma string entre aspas, você pode efetuar o escape as aspas usando duas em seguida: Exemplo: "Hello
""World"""
Matrizes de strings são permitidas, mas as strings em uma matriz não podem incluir o caractere ponto e vírgula (;), a menos que ele tenha uma barra invertida como caractere de escape (como este: \;).
Se desejar usar sequências entre aspas em uma matriz, você deverá colocar a matriz inteira entre um conjunto de aspas. Exemplo: "String one; String 2; String 3"
Data
Data do Java no formato ISO-8601. Compatível com os formatos: yyyy-MM-dd, yyyy-MM-ddTHH:mm, yyyy-MM-ddTHH:mm:ss, yyyy-MM-ddTHH:mm:ssZ. Os valores são convertidos em horário de época e armazenados.
Datetime
Data do Java no formato ISO-8601. Compatível com os formatos: yyyy-MM-dd, yyyy-MM-ddTHH:mm, yyyy-MM-ddTHH:mm:ss, yyyy-MM-ddTHH:mm:ssZ. Os valores são convertidos em horário de época e armazenados.
Formato de linhas do Gremlin
Delimitadores
Os campos em uma linha são separados por uma vírgula. Os registros são separados por uma nova linha ou por uma nova linha seguida por um retorno de carro.
Campos em branco
Os campos em branco são permitidos para colunas não necessárias (como as propriedades definidas pelo usuário). Um campo em branco ainda exige uma vírgula separadora. Campos em branco nas colunas obrigatórias resultarão em erro de análise. Valores de string vazios são interpretados como valores de string vazios para o campo, não como um campo em branco. O exemplo na próxima seção tem um campo em branco em cada vértice de exemplo.
IDs de vértices
~idOs valores de devem ser exclusivos para todos os vértices em cada arquivo de vértice. Várias linhas de vértices com valores idênticos de ~id são aplicadas a um único vértice no gráfico. Uma string vazia ("") é uma identificação válida e o vértice é criado com uma string vazia como a identificação.
IDs de pontos
Além disso, os valores de ~id devem ser exclusivos para todos os pontos em cada arquivo de ponto. Várias linhas de pontos com valores idênticos de ~id são aplicadas ao único ponto no gráfico. Uma string vazia ("") é uma identificação válida e a borda é criada com uma string vazia como a identificação.
Rótulos
Os rótulos diferenciam maiúsculas e minúsculas e não podem ser vazios. Um valor de "" resultará em erro.
Valores de sequências
Aspas são opcionais. Os caracteres de vírgulas, nova linha e retorno de carro serão escapados automaticamente se forem incluídos em uma sequência entre aspas duplas ("). Valores de string vazios, como (""), são interpretados como valores de string vazios para o campo, não como um campo em branco.
Especificação do formato CSV
O formato CSV do Neptune segue a especificação RFC 4180 CSV, incluindo os requisitos a seguir.
Os finais de linha no estilo do Unix e do Windows são compatíveis (\n ou \r\n).
Qualquer campo pode ser colocado entre aspas (usando aspas duplas).
Campos que contêm uma quebra de linha, aspas duplas ou vírgulas devem ser colocados entre aspas. (Se não estiverem, o carregamento será abortado imediatamente.)
Um caractere de aspas duplas (
") em um campo deve ser representado por dois caracteres de aspas duplas. Por exemplo, uma sequênciaHello "World"deve estar presente como"Hello ""World"""nos dados.Espaços circundantes entre delimitadores são ignorados. Se uma linha estiver presente como
value1, value2, são armazenados como"value1"e"value2".Todos os outros caracteres de escape são armazenados textualmente. Por exemplo,
"data1\tdata2"é armazenado como"data1\tdata2". Nenhum outro escape é necessário, desde que esses caracteres sejam incluídos entre aspas.Campos em branco são permitidos. Um campo em branco é considerado um valor vazio.
Vários valores para um campo são especificados com um ponto e vírgula (
;) entre os valores.
Para obter mais informações consulte Formato comum e tipo MIME para arquivos CSV
Exemplo do Gremlin
O diagrama a seguir mostra um exemplo de dois vértices e um ponto retirados do gráfico moderno do TinkerPop.
Veja o grafo no formato de carga do CSV do Neptune.
Arquivo de vértice:
~id,name:String,age:Int,lang:String,interests:String[],~label v1,"marko",29,,"sailing;graphs",person v2,"lop",,"java",,software
Visualização tabular do arquivo de vértice:
| ~id | name:String | age:Int | lang:String | interests:String[] | ~label |
| v1 | "marko" | 29 | ["sailing", "graphs"] | person | |
| v2 | "lop" | "java" | software |
Arquivo de ponto
~id,~from,~to,~label,weight:Double e1,v1,v2,created,0.4
Visualização tabular do arquivo de ponto:
| ~id | ~from | ~to | ~label | weight:Double |
| e1 | v1 | v2 | created | 0.4 |
Próximas etapas
Agora que você sabe mais sobre os formatos de carregamento, consulte Exemplo: carregamento de dados em uma instância de banco de dados do Neptune.