diff --git a/antora.yml b/antora.yml index 2c558b0b3..28a3143aa 100644 --- a/antora.yml +++ b/antora.yml @@ -1,14 +1,14 @@ name: operations-manual title: Operations Manual -version: '2025.02' +version: '2025.03' current: true start_page: ROOT:index.adoc nav: - modules/ROOT/content-nav.adoc asciidoc: attributes: - neo4j-version: '2025.02' - neo4j-version-minor: '2025.02' - neo4j-version-exact: '2025.02.0' - neo4j-buildnumber: '2025.02' - neo4j-debian-package-version: '1:2025.02.0@' + neo4j-version: '2025.03' + neo4j-version-minor: '2025.03' + neo4j-version-exact: '2025.03.0' + neo4j-buildnumber: '2025.03' + neo4j-debian-package-version: '1:2025.03.0@' diff --git a/modules/ROOT/content-nav.adoc b/modules/ROOT/content-nav.adoc index 9b3721aab..fb5f6516f 100644 --- a/modules/ROOT/content-nav.adoc +++ b/modules/ROOT/content-nav.adoc @@ -84,6 +84,7 @@ ** xref:configuration/dynamic-settings.adoc[] ** xref:configuration/configuration-settings.adoc[] *** xref:configuration/configuration-settings.adoc#_checkpoint_settings[Checkpoint settings] +*** xref:configuration/configuration-settings.adoc#_cloud_storage_integration_settings[Cloud storage integration settings] *** xref:configuration/configuration-settings.adoc#_cluster_settings[Cluster settings] *** xref:configuration/configuration-settings.adoc#_connection_settings[Connection settings] *** xref:configuration/configuration-settings.adoc#_cypher_settings[Cypher settings] diff --git a/modules/ROOT/pages/backup-restore/aggregate.adoc b/modules/ROOT/pages/backup-restore/aggregate.adoc index b23c61c8f..0aaeb0a31 100644 --- a/modules/ROOT/pages/backup-restore/aggregate.adoc +++ b/modules/ROOT/pages/backup-restore/aggregate.adoc @@ -154,6 +154,9 @@ If found, it is then aggregated into a single backup artifact. [[aggregate-backup-cloud-storage]] === Aggregating a backup chain located in a cloud storage +In Neo4j 2025.03, new cloud integration settings are introduced to provide better support for deployment and management in cloud ecosystems. +For details, refer to xref:configuration/configuration-settings.adoc#_cloud_storage_integration_settings[Configuration settings -> Cloud storage integration settings]. + The following examples show how to perform aggregation of a set of backups located in a cloud storage. [.tabbed-example] diff --git a/modules/ROOT/pages/backup-restore/offline-backup.adoc b/modules/ROOT/pages/backup-restore/offline-backup.adoc index 8012f1315..ce8256e00 100644 --- a/modules/ROOT/pages/backup-restore/offline-backup.adoc +++ b/modules/ROOT/pages/backup-restore/offline-backup.adoc @@ -127,6 +127,9 @@ bin/neo4j-admin database dump neo4j --to-path=/full/path/to/dumps [[offline-backup-cloud-storage]] === Dump a database to a folder located in a cloud storage +In Neo4j 2025.03, new cloud integration settings are introduced to provide better support for deployment and management in cloud ecosystems. +For details, refer to xref:configuration/configuration-settings.adoc#_cloud_storage_integration_settings[Configuration settings -> Cloud storage integration settings]. + The following examples show how to dump a database to a cloud storage bucket using the `--to-path` option. [.tabbed-example] diff --git a/modules/ROOT/pages/backup-restore/online-backup.adoc b/modules/ROOT/pages/backup-restore/online-backup.adoc index c9018cda7..3aa04ca5d 100644 --- a/modules/ROOT/pages/backup-restore/online-backup.adoc +++ b/modules/ROOT/pages/backup-restore/online-backup.adoc @@ -409,6 +409,9 @@ neo4j-admin database backup --from=192.168.1.34:6362,192.168.1.35:6362,192.168.1 [[online-backup-cloud-storage]] === Back up a database to a cloud storage +In Neo4j 2025.03, new cloud integration settings are introduced to provide better support for deployment and management in cloud ecosystems. +For details, refer to xref:configuration/configuration-settings.adoc#_cloud_storage_integration_settings[Configuration settings -> Cloud storage integration settings]. + The following examples show how to back up a database to a cloud storage bucket using the `--to-path` option. [.tabbed-example] diff --git a/modules/ROOT/pages/backup-restore/restore-backup.adoc b/modules/ROOT/pages/backup-restore/restore-backup.adoc index 7972fc48c..8606948dd 100644 --- a/modules/ROOT/pages/backup-restore/restore-backup.adoc +++ b/modules/ROOT/pages/backup-restore/restore-backup.adoc @@ -237,6 +237,9 @@ CREATE DATABASE mydatabase; [[restore-cloud-storage]] === Restore a backup located in a cloud storage +In Neo4j 2025.03, new cloud integration settings are introduced to provide better support for deployment and management in cloud ecosystems. +For details, refer to xref:configuration/configuration-settings.adoc#_cloud_storage_integration_settings[Configuration settings -> Cloud storage integration settings]. + The following examples show how to restore a database located in a cloud storage bucket using the `--from-path` option. [.tabbed-example] diff --git a/modules/ROOT/pages/backup-restore/restore-dump.adoc b/modules/ROOT/pages/backup-restore/restore-dump.adoc index a1f08a70c..974f44fb1 100644 --- a/modules/ROOT/pages/backup-restore/restore-dump.adoc +++ b/modules/ROOT/pages/backup-restore/restore-dump.adoc @@ -148,6 +148,9 @@ cat foo.dump | neo4j-admin database load --from-stdin mydatabase [[load-dump-cloud-storage]] === Load a dump from a cloud storage +In Neo4j 2025.03, new cloud integration settings are introduced to provide better support for deployment and management in cloud ecosystems. +For details, refer to xref:configuration/configuration-settings.adoc#_cloud_storage_integration_settings[Configuration settings -> Cloud storage integration settings]. + The following examples show how to load a database dump located in a cloud storage bucket using the `--from-path` option. [.tabbed-example] diff --git a/modules/ROOT/pages/configuration/configuration-settings.adoc b/modules/ROOT/pages/configuration/configuration-settings.adoc index af44d3942..f87138b06 100644 --- a/modules/ROOT/pages/configuration/configuration-settings.adoc +++ b/modules/ROOT/pages/configuration/configuration-settings.adoc @@ -146,6 +146,73 @@ a|An integer. m|+++600+++ |=== +== Cloud storage integration settings + +Cloud integration settings allow you to specify custom Azure blob storage endpoints and host authorities, set the project ID for Google Cloud Storage buckets, and define the desired throughput for transfer operations in Amazon S3. + +[role=label--enterprise-edition label--new-2025.03] +[[config_dbms.integrations.cloud_storage.azb.blob_endpoint_suffix]] +=== `dbms.integrations.cloud_storage.azb.blob_endpoint_suffix` + +.dbms.integrations.cloud_storage.azb.blob_endpoint_suffix +[frame="topbot", stripes=odd, grid="cols", cols="<1s,<4"] +|=== +|Description +a|Azure blob storage endpoint suffix. You need to change this if you are not using Azure public cloud (e.g., if you are using Azure Government). +|Valid values +a|A string. +|Default value +m|+++blob.core.windows.net+++ +|=== + + +[role=label--enterprise-edition label--new-2025.03] +[[config_dbms.integrations.cloud_storage.azb.authority_endpoint]] +=== `dbms.integrations.cloud_storage.azb.authority_endpoint` + +.dbms.integrations.cloud_storage.azb.authority_endpoint +[frame="topbot", stripes=odd, grid="cols", cols="<1s,<4"] +|=== +|Description +a|Azure authority host endpoint (only required for certain methods of authentication, it should be specified in its full form - e.g., https://login.microsoftonline.com). +|Valid values +a|A string. +|Default value +m|++++++ +|=== + + +[role=label--enterprise-edition label--new-2025.03] +[[config_dbms.integrations.cloud_storage.gs.project_id]] +=== `dbms.integrations.cloud_storage.gs.project_id` + +.dbms.integrations.cloud_storage.gs.project_id +[frame="topbot", stripes=odd, grid="cols", cols="<1s,<4"] +|=== +|Description +a|Project ID of the Google storage bucket(s) to connect to, falling back to the value found by their SDK. +|Valid values +a|A string. +|Default value +m|++++++ +|=== + + +[role=label--enterprise-edition label--new-2025.03] +[[config_dbms.integrations.cloud_storage.s3.target_throughput_gbps]] +=== `dbms.integrations.cloud_storage.s3.target_throughput_gbps` + +.dbms.integrations.cloud_storage.s3.target_throughput_gbps +[frame="topbot", stripes=odd, grid="cols", cols="<1s,<4"] +|=== +|Description +a|The target throughput for transfer requests. Higher value means more connections will be established with S3. It's recommended to set it to the maximum network bandwidth on the host that the application is running on. The default is `10.0`, but when running on EC2 instances, this value can often be set much higher (being specific to the EC2 instance type). +|Valid values +a|A double. +|Default value +m|+++10.0+++ +|=== + == Cluster settings @@ -1864,6 +1931,23 @@ m|+++0.75+++ |=== +[role=label--dynamic label--new-2025.03] +[[config_dbms.cypher.transactions.default_subquery_retry_timeout]] +=== `dbms.cypher.transactions.default_subquery_retry_timeout` + +.dbms.cypher.transactions.default_subquery_retry_timeout +[frame="topbot", stripes=odd, grid="cols", cols="<1s,<4"] +|=== +|Description +a|The default maximum amount of time to attempt retries of a subquery transaction that fails with a transient error in a query with a `CALL () { ... } IN TRANSACTIONS ... ON ERROR RETRY ...` clause. This setting is only used when no retry timeout is explicitly specified in the query. E.g. `CALL () { ... } IN TRANSACTIONS ... ON ERROR RETRY FOR 10 SECONDS` would override this setting with a 10 second retry timeout for that particular query. +|Valid values +a|A duration (Valid units are: ns, μs, ms, s, m, h and d; default unit is s). +|Default value +m|+++30s+++ +|=== + + + [role=label--enterprise-edition] [[config_server.cypher.parallel.worker_limit]] === `server.cypher.parallel.worker_limit` @@ -3012,7 +3096,7 @@ a|Specifies which metrics should be enabled by using a comma separated list of g |Valid values a|A comma-separated list where each element is A simple globbing pattern that can use `*` and `?`.. |Default value -m|+++*bolt.connections*,*bolt.messages_received*,*bolt.messages_started*,*dbms.pool.bolt.free,*dbms.pool.bolt.total_size,*dbms.pool.bolt.total_used,*dbms.pool.bolt.used_heap,*cluster.raft.is_leader,*cluster.raft.last_leader_message,*cluster.raft.replication_attempt,*cluster.raft.replication_fail,*cluster.raft.last_applied,*cluster.raft.last_appended,*cluster.raft.append_index,*cluster.raft.commit_index,*cluster.raft.applied_index,*cluster.internal.discovery.memberset.left,*cluster.internal.discovery.crdt.gossip_id_data.size,*cluster.internal.discovery.crdt.server_data.size,*cluster.internal.discovery.crdt.database_data.size,*cluster.internal.discovery.crdt.leader_data.size,*cluster.internal.discovery.crdt.total_merge_operations,*cluster.internal.discovery.crdt.total_update_operations,*cluster.internal.discovery.gossip.incoming_queue_size,*cluster.internal.discovery.gossip.total_received_data,*cluster.internal.discovery.gossip.total_sent_data,*cluster.internal.discovery.gossip.uncontactable_members_exist,*check_point.*,*cypher.replan_events,*cypher.cache*,*ids_in_use*,*pool.transaction.*.total_used,*pool.transaction.*.used_heap,*pool.transaction.*.used_native,*store.size*,*transaction.active_read,*transaction.active_write,*transaction.committed*,*transaction.last_committed_tx_id,*transaction.peak_concurrent,*transaction.rollbacks*,*page_cache.hit*,*page_cache.page_faults,*page_cache.usage_ratio,*vm.file.descriptors.count,*vm.gc.time.*,*vm.heap.used,*vm.memory.buffer.direct.used,*vm.memory.pool.g1_eden_space,*vm.memory.pool.g1_old_gen,*vm.pause_time,*vm.thread*,*db.query.execution*,*protocol*+++ +m|+++*bolt.connections*,*bolt.messages_received*,*bolt.messages_started*,*dbms.pool.bolt.free,*dbms.pool.bolt.total_size,*dbms.pool.bolt.total_used,*dbms.pool.bolt.used_heap,*cluster.raft.is_leader,*cluster.raft.last_leader_message,*cluster.raft.replication_attempt,*cluster.raft.replication_fail,*cluster.raft.last_applied,*cluster.raft.last_appended,*cluster.raft.append_index,*cluster.raft.commit_index,*cluster.raft.applied_index,*cluster.internal.discovery.memberset.left,*cluster.internal.discovery.crdt.gossip_id_data.size,*cluster.internal.discovery.crdt.server_data.size,*cluster.internal.discovery.crdt.database_data.size,*cluster.internal.discovery.crdt.leader_data.size,*cluster.internal.discovery.crdt.total_merge_operations,*cluster.internal.discovery.crdt.total_update_operations,*cluster.internal.discovery.gossip.incoming_queue_size,*cluster.internal.discovery.gossip.total_received_data,*cluster.internal.discovery.gossip.total_sent_data,*cluster.internal.discovery.gossip.uncontactable_members_exist,*check_point.*,*cypher.replan_events,*cypher.cache*,*ids_in_use*,*.neo4j.count.*,*pool.transaction.*.total_used,*pool.transaction.*.used_heap,*pool.transaction.*.used_native,*store.size*,*transaction.active_read,*transaction.active_write,*transaction.committed*,*transaction.last_committed_tx_id,*transaction.peak_concurrent,*transaction.rollbacks*,*page_cache.hit*,*page_cache.page_faults,*page_cache.usage_ratio,*vm.file.descriptors.count,*vm.gc.time.*,*vm.heap.used,*vm.memory.buffer.direct.used,*vm.memory.pool.g1_eden_space,*vm.memory.pool.g1_old_gen,*vm.pause_time,*vm.thread*,*db.query.execution*,*protocol*+++ label:changed[Changed in 2025.03] |=== @@ -4390,6 +4474,22 @@ m|+++false+++ |=== +[role=label--enterprise-edition label--new-2025.03] +[[config_dbms.security.tls_reload_enabled]] +=== `dbms.security.tls_reload_enabled` + +.dbms.security.tls_reload_enabled +[frame="topbot", stripes=odd, grid="cols", cols="<1s,<4"] +|=== +|Description +a|Enable the reloading to TLS configuration and certificates dynamically by calling a procedure. +|Valid values +a|A boolean. +|Default value +m|+++false+++ +|=== + + [[config_dbms.netty.ssl.provider]] === `dbms.netty.ssl.provider` diff --git a/modules/ROOT/pages/configuration/dynamic-settings.adoc b/modules/ROOT/pages/configuration/dynamic-settings.adoc index 97580081a..5404ed39e 100644 --- a/modules/ROOT/pages/configuration/dynamic-settings.adoc +++ b/modules/ROOT/pages/configuration/dynamic-settings.adoc @@ -61,6 +61,7 @@ RETURN name | "db.tx_log.rotation.size" | | "dbms.cluster.network.connect_timeout" | | "dbms.cypher.render_plan_description" | +| "dbms.cypher.transactions.default_subquery_retry_timeout" | | "dbms.memory.transaction.total.max" | | "dbms.routing.client_side.enforce_for_domains" | | "dbms.routing.reads_on_writers_enabled" | diff --git a/modules/ROOT/pages/monitoring/metrics/reference.adoc b/modules/ROOT/pages/monitoring/metrics/reference.adoc index aa2e2534b..2c2d31f17 100644 --- a/modules/ROOT/pages/monitoring/metrics/reference.adoc +++ b/modules/ROOT/pages/monitoring/metrics/reference.adoc @@ -440,7 +440,7 @@ label:deprecated[Deprecated in 5.15] |.cluster.raft.commit_index|The commit index of the Raft log. Represents the commitment of previously appended entries. Its value increases monotonically if you do not unbind the cluster state. The commit index should always be less than or equal to the append index and bigger than or equal to the applied index. (gauge) |.cluster.raft.applied_index|The applied index of the Raft log. Represents the application of the committed Raft log entries to the database and internal state. The applied index should always be less than or equal to the commit index. The difference between this and the commit index can be used to monitor how up-to-date the follower database is. (gauge) |.cluster.raft.prune_index |The head index of the Raft log. Represents the oldest Raft index that exists in the log. A prune event will increase this value. This can be used to track how much history of Raft logs the member has. (gauge) -|.cluster.raft.term|The Raft Term of this server. It increases monotonically if you do not unbind the cluster state. (gauge) +|.cluster.raft.term|The Raft term of this database. It increases monotonically unless you clear the cluster state. (gauge) |.cluster.raft.tx_retries|label:deprecated[Deprecated in 2025.02] Transaction retries. (counter) |.cluster.raft.is_leader|Is this server the leader? Track this for each rafted primary database in the cluster. It reports `0` if it is not the leader and `1` if it is the leader. The sum of all of these should always be `1`. However, there are transient periods in which the sum can be more than `1` because more than one member thinks it is the leader. Action may be needed if the metric shows `0` for more than 30 seconds. (gauge) |.cluster.raft.in_flight_cache.total_bytes|In-flight cache total bytes. (gauge) @@ -449,18 +449,18 @@ label:deprecated[Deprecated in 5.15] |.cluster.raft.in_flight_cache.max_elements|In-flight cache maximum elements. (gauge) |.cluster.raft.in_flight_cache.hits|In-flight cache hits. (counter) |.cluster.raft.in_flight_cache.misses|In-flight cache misses. (counter) -|.cluster.raft.raft_log_entry_prefetch_buffer.lag|Raft Log Entry Prefetch Lag. (gauge) -|.cluster.raft.raft_log_entry_prefetch_buffer.bytes|Raft Log Entry Prefetch total bytes. (gauge) -|.cluster.raft.raft_log_entry_prefetch_buffer.size|Raft Log Entry Prefetch buffer size. (gauge) +|.cluster.raft.raft_log_entry_prefetch_buffer.lag|Raft log entry prefetch buffer lag. The amount of entries that have been added to the Raft log but not applied to the store. (gauge) +|.cluster.raft.raft_log_entry_prefetch_buffer.bytes|Raft log entry prefetch buffer bytes. The total size of the entries in the prefetch buffer counted in bytes. (gauge) +|.cluster.raft.raft_log_entry_prefetch_buffer.size|Raft log entry prefetch buffer size. The amount of entries that are stored in the prefetch buffer. (gauge) |.cluster.raft.raft_log_entry_prefetch_buffer.async_put|Raft Log Entry Prefetch buffer async puts. (gauge) |.cluster.raft.raft_log_entry_prefetch_buffer.sync_put|Raft Log Entry Prefetch buffer sync puts. (gauge) -|.cluster.raft.message_processing_delay|Delay between Raft message receive and process. +|.cluster.raft.message_processing_delay|Delay between receiving a Raft message and starting its processing. (gauge) -|.cluster.raft.message_processing_timer|Timer for Raft message processing. (counter, histogram) +|.cluster.raft.message_processing_timer|Metrics Timer for Raft message processing, independent of the message type. The Timer provides different types of statistics, for example, `min`, `max`, `p999`, and `mean_rate`. (counter, histogram) |.cluster.raft.replication_new|The total number of Raft replication requests. It increases with write transactions (possibly internal) activity. (counter) |.cluster.raft.replication_attempt|The total number of Raft replication requests attempts. It is bigger or equal to the replication requests. (counter) |.cluster.raft.replication_fail|The total number of Raft replication attempts that have failed. (counter) -|.cluster.raft.replication_maybe|Raft Replication maybe count. (counter) +|.cluster.raft.replication_maybe|The total number of Raft replication attempts where the result of the replication is not known locally. (counter) |.cluster.raft.replication_success|The total number of Raft replication requests that have succeeded. (counter) |.cluster.raft.last_leader_message|The time elapsed since the last message from a leader in milliseconds. Should reset periodically. (gauge) |.cluster.raft.snapshot_attempt|label:new[Introduced in 2025.01] Total number of attempts to download Raft snapshots triggered. (counter) diff --git a/modules/ROOT/pages/procedures.adoc b/modules/ROOT/pages/procedures.adoc index bcaa6b296..0c5eb1910 100644 --- a/modules/ROOT/pages/procedures.adoc +++ b/modules/ROOT/pages/procedures.adoc @@ -74,6 +74,18 @@ For more information, see xref:authentication-authorization/index.adoc[Authentic | *Mode* 3+| DBMS |=== +[role=label--enterprise-edition label--admin-only label--new-2025.03] +[[procedure_dbms_security_reload_tls]] +=== dbms.security.reloadTLS() + + +.Details +|=== +| *Syntax* 3+m| dbms.security.reloadTLS() +| *Description* 3+a| Trigger the dynamic reloading of all TLS certificates and configuration. +| *Mode* 3+| DBMS +|=== + [[procedure_dbms_showcurrentuser]] diff --git a/modules/ROOT/pages/security/ssl-framework.adoc b/modules/ROOT/pages/security/ssl-framework.adoc index fd8419439..a6c7dc65b 100644 --- a/modules/ROOT/pages/security/ssl-framework.adoc +++ b/modules/ROOT/pages/security/ssl-framework.adoc @@ -1108,6 +1108,50 @@ Beware that the SSL debug option logs a new statement every time a client connec To avoid that scenario, make sure this setting is only enabled for a short term duration. ==== +[role=label--new-2025.03] +[[certificate-rotation]] +== Certificates rotation + +It is considered best practice to use certificates with reasonably short duration. +This, however, requires the periodic rotation of certificates whereby old certificates are removed and the new ones are installed. +Previous versions of Neo4j required a database restart for changes to be applied. +Starting from 2025.03, new certificates can be rotated in, and SSL configuration can be updated without requiring a restart. +This reduces undesirable effects of transient loss of cluster members. + +The following steps outline the process for certificates rotation. + +. Enable the dynamic reloading of certificates on all cluster members. +It is best to do this when the cluster is deployed as changing this configuration requires a restart: ++ +[source, properties] +---- +dbms.security.tls_reload_enabled=true (default is false) +---- + +. Replace old certificates either by overwriting them on the filesystem or by copying them to a new location. ++ +Keep in mind that if you choose to copy the certificates to a new directory or use different filenames, you must dynamically update the SSL policy settings. +If you are overwriting the certificates in place and not changing anything else, there is no need to dynamically update the SSL policy settings. ++ +New and old certificates may co-exist on the filesystem, but only one can be referenced in the configuration. + +It is required to copy new certificates to all cluster members. + +. Make necessary changes to any of the SSL configuration and/or replace certificates for affected scopes. + +. Connect to each cluster member in turn with Cypher Shell using a <> and run the reload procedure: ++ +[source] +---- +dbms.security.reloadTLS() +---- + +. New settings will take effect immediately; however, existing connections will not be preemptively terminated. +This means that while new connections will use new certificates, the existing connections (established before the update) will continue using the old certificates. +Even if a certificate expires, active connections remain unaffected because the certificates are only used during the initial connection handshake. + +. Verify that the intra-cluster communication is still encrypted using external tooling, such as Nmap, described in <>. + + [[ssl-terminology]] == Terminology diff --git a/modules/ROOT/pages/tools/neo4j-admin/neo4j-admin-import.adoc b/modules/ROOT/pages/tools/neo4j-admin/neo4j-admin-import.adoc index 1ddbef9c9..275f6a36a 100644 --- a/modules/ROOT/pages/tools/neo4j-admin/neo4j-admin-import.adoc +++ b/modules/ROOT/pages/tools/neo4j-admin/neo4j-admin-import.adoc @@ -472,6 +472,9 @@ bin/neo4j-admin database import full --nodes import/node_header.csv,'import/node [[import-files-from-cloud-storage]] ==== Importing files from a cloud storage +In Neo4j 2025.03, new cloud integration settings are introduced to provide better support for deployment and management in cloud ecosystems. +For details, refer to xref:configuration/configuration-settings.adoc#_cloud_storage_integration_settings[Configuration settings -> Cloud storage integration settings]. + The following examples show how to import data stored in a cloud storage bucket using the `--nodes` and `--relationships` options. [.tabbed-example] @@ -981,6 +984,20 @@ For example, you can use `uuid:ID(Person){label:Person}`, where the relationship * For examples of creating property uniqueness constraints, see link:{neo4j-docs-base-uri}/cypher-manual/current/constraints/managing-constraints/#create-property-uniqueness-constraints[Cypher Manual -> Create property uniqueness constraints]. ==== +=== Extended header support for Parquet + +In addition to the header format supported by the CSV import, the Parquet import supports name-mapping header files. +Those files contain two rows of entries, where the first row represents the name (incl. optional type, id group, etc.), and the second row references the name of the original columns in the data files. + +.movie_header.csv +[source, csv] +---- +movieId:ID,title,year:int,:LABEL +id,movie_title,year,label +---- + +If a header file is provided for a set of labels or a relationship type, the importer will ignore columns not mentioned in the headers. + [[import-tool-header-format-nodes]] == Node files