diff --git a/cpp/src/arrow/ipc/CMakeLists.txt b/cpp/src/arrow/ipc/CMakeLists.txt
index 056e7dba538..d6ee9309b44 100644
--- a/cpp/src/arrow/ipc/CMakeLists.txt
+++ b/cpp/src/arrow/ipc/CMakeLists.txt
@@ -114,6 +114,7 @@ set(FBS_SRC
${CMAKE_SOURCE_DIR}/../format/Message.fbs
${CMAKE_SOURCE_DIR}/../format/File.fbs
${CMAKE_SOURCE_DIR}/../format/Schema.fbs
+ ${CMAKE_SOURCE_DIR}/../format/Tensor.fbs
${CMAKE_CURRENT_SOURCE_DIR}/feather.fbs)
foreach(FIL ${FBS_SRC})
diff --git a/format/Message.fbs b/format/Message.fbs
index 2cb60953c6a..f4a95713cea 100644
--- a/format/Message.fbs
+++ b/format/Message.fbs
@@ -16,6 +16,7 @@
// under the License.
include "Schema.fbs";
+include "Tensor.fbs";
namespace org.apache.arrow.flatbuf;
@@ -82,7 +83,7 @@ table DictionaryBatch {
/// which may include experimental metadata types. For maximum compatibility,
/// it is best to send data using RecordBatch
union MessageHeader {
- Schema, DictionaryBatch, RecordBatch
+ Schema, DictionaryBatch, RecordBatch, Tensor
}
table Message {
diff --git a/format/Tensor.fbs b/format/Tensor.fbs
new file mode 100644
index 00000000000..bc5b6d1289b
--- /dev/null
+++ b/format/Tensor.fbs
@@ -0,0 +1,60 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+/// EXPERIMENTAL: Metadata for n-dimensional arrays, aka "tensors" or
+/// "ndarrays". Arrow implementations in general are not required to implement
+/// this type
+
+include "Schema.fbs";
+
+namespace org.apache.arrow.flatbuf;
+
+/// Shape data for a single axis in a tensor
+table TensorDim {
+ /// Length of dimension
+ size: long;
+
+ /// Name of the dimension, optional
+ name: string;
+}
+
+enum TensorOrder : byte {
+ /// Higher dimensions vary first when traversing data in byte-contiguous
+ /// order, aka "C order"
+ ROW_MAJOR,
+
+ /// Lower dimensions vary first when traversing data in byte-contiguous
+ /// order, aka "Fortran order"
+ COLUMN_MAJOR
+}
+
+table Tensor {
+ /// The type of data contained in a value cell. Currently only fixed-width
+ /// value types are supported, no strings or nested types
+ type: Type;
+
+ /// The dimensions of the tensor, optionally named
+ shape: [TensorDim];
+
+ /// The memory order of the tensor's data
+ order: TensorOrder;
+
+ /// The location and size of the tensor's data
+ data: Buffer;
+}
+
+root_type Tensor;
diff --git a/java/format/pom.xml b/java/format/pom.xml
index e7a58a4172f..98a113a30cf 100644
--- a/java/format/pom.xml
+++ b/java/format/pom.xml
@@ -110,8 +110,9 @@
-o
${flatc.generated.files}
../../format/Schema.fbs
- ../../format/Message.fbs
+ ../../format/Tensor.fbs
../../format/File.fbs
+ ../../format/Message.fbs