blob: 298313ec4b991ddc0e60bc3969f0faa194e02e64 [file] [log] [blame]
import{_ as p,C as o,O as i,P as c,ah as l,Q as s,U as n,ai as e,aW as t}from"./framework-e4340ccd.js";const u={},r=t('<h2 id="python-native-api" tabindex="-1"><a class="header-anchor" href="#python-native-api" aria-hidden="true">#</a> Python Native API</h2><h3 id="requirements" tabindex="-1"><a class="header-anchor" href="#requirements" aria-hidden="true">#</a> Requirements</h3><p>You have to install thrift (&gt;=0.13) before using the package.</p><h3 id="how-to-use-example" tabindex="-1"><a class="header-anchor" href="#how-to-use-example" aria-hidden="true">#</a> How to use (Example)</h3><p>First, download the package: <code>pip3 install apache-iotdb</code></p>',5),d={href:"https://github.com/apache/iotdb/blob/master/client-py/SessionExample.py",target:"_blank",rel:"noopener noreferrer"},k={href:"https://github.com/apache/iotdb/blob/master/client-py/SessionAlignedTimeseriesExample.py",target:"_blank",rel:"noopener noreferrer"},m=t(`<p>(you need to add <code>import iotdb</code> in the head of the file)</p><p>Or:</p><div class="language-python line-numbers-mode" data-ext="py"><pre class="language-python"><code><span class="token keyword">from</span> iotdb<span class="token punctuation">.</span>Session <span class="token keyword">import</span> Session
ip <span class="token operator">=</span> <span class="token string">&quot;127.0.0.1&quot;</span>
port_ <span class="token operator">=</span> <span class="token string">&quot;6667&quot;</span>
username_ <span class="token operator">=</span> <span class="token string">&quot;root&quot;</span>
password_ <span class="token operator">=</span> <span class="token string">&quot;root&quot;</span>
session <span class="token operator">=</span> Session<span class="token punctuation">(</span>ip<span class="token punctuation">,</span> port_<span class="token punctuation">,</span> username_<span class="token punctuation">,</span> password_<span class="token punctuation">)</span>
session<span class="token punctuation">.</span><span class="token builtin">open</span><span class="token punctuation">(</span><span class="token boolean">False</span><span class="token punctuation">)</span>
zone <span class="token operator">=</span> session<span class="token punctuation">.</span>get_time_zone<span class="token punctuation">(</span><span class="token punctuation">)</span>
session<span class="token punctuation">.</span>close<span class="token punctuation">(</span><span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="initialization" tabindex="-1"><a class="header-anchor" href="#initialization" aria-hidden="true">#</a> Initialization</h3><ul><li>Initialize a Session</li></ul><div class="language-python line-numbers-mode" data-ext="py"><pre class="language-python"><code>session <span class="token operator">=</span> Session<span class="token punctuation">(</span>
ip<span class="token operator">=</span><span class="token string">&quot;127.0.0.1&quot;</span><span class="token punctuation">,</span>
port<span class="token operator">=</span><span class="token string">&quot;6667&quot;</span><span class="token punctuation">,</span>
user<span class="token operator">=</span><span class="token string">&quot;root&quot;</span><span class="token punctuation">,</span>
password<span class="token operator">=</span><span class="token string">&quot;root&quot;</span><span class="token punctuation">,</span>
fetch_size<span class="token operator">=</span><span class="token number">1024</span><span class="token punctuation">,</span>
zone_id<span class="token operator">=</span><span class="token string">&quot;UTC+8&quot;</span><span class="token punctuation">,</span>
enable_redirection<span class="token operator">=</span><span class="token boolean">True</span>
<span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Initialize a Session to connect multiple nodes</li></ul><div class="language-python line-numbers-mode" data-ext="py"><pre class="language-python"><code>session <span class="token operator">=</span> Session<span class="token punctuation">.</span>init_from_node_urls<span class="token punctuation">(</span>
node_urls<span class="token operator">=</span><span class="token punctuation">[</span><span class="token string">&quot;127.0.0.1:6667&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;127.0.0.1:6668&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;127.0.0.1:6669&quot;</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
user<span class="token operator">=</span><span class="token string">&quot;root&quot;</span><span class="token punctuation">,</span>
password<span class="token operator">=</span><span class="token string">&quot;root&quot;</span><span class="token punctuation">,</span>
fetch_size<span class="token operator">=</span><span class="token number">1024</span><span class="token punctuation">,</span>
zone_id<span class="token operator">=</span><span class="token string">&quot;UTC+8&quot;</span><span class="token punctuation">,</span>
enable_redirection<span class="token operator">=</span><span class="token boolean">True</span>
<span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Open a session, with a parameter to specify whether to enable RPC compression</li></ul><div class="language-python line-numbers-mode" data-ext="py"><pre class="language-python"><code>session<span class="token punctuation">.</span><span class="token builtin">open</span><span class="token punctuation">(</span>enable_rpc_compression<span class="token operator">=</span><span class="token boolean">False</span><span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><p>Notice: this RPC compression status of client must comply with that of IoTDB server</p><ul><li>Close a Session</li></ul><div class="language-python line-numbers-mode" data-ext="py"><pre class="language-python"><code>session<span class="token punctuation">.</span>close<span class="token punctuation">(</span><span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><h3 id="data-definition-interface-ddl-interface" tabindex="-1"><a class="header-anchor" href="#data-definition-interface-ddl-interface" aria-hidden="true">#</a> Data Definition Interface (DDL Interface)</h3><h4 id="database-management" tabindex="-1"><a class="header-anchor" href="#database-management" aria-hidden="true">#</a> Database Management</h4><ul><li>CREATE DATABASE</li></ul><div class="language-python line-numbers-mode" data-ext="py"><pre class="language-python"><code>session<span class="token punctuation">.</span>set_storage_group<span class="token punctuation">(</span>group_name<span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ul><li>Delete one or several databases</li></ul><div class="language-python line-numbers-mode" data-ext="py"><pre class="language-python"><code>session<span class="token punctuation">.</span>delete_storage_group<span class="token punctuation">(</span>group_name<span class="token punctuation">)</span>
session<span class="token punctuation">.</span>delete_storage_groups<span class="token punctuation">(</span>group_name_lst<span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div></div></div><h4 id="timeseries-management" tabindex="-1"><a class="header-anchor" href="#timeseries-management" aria-hidden="true">#</a> Timeseries Management</h4><ul><li>Create one or multiple timeseries</li></ul><div class="language-python line-numbers-mode" data-ext="py"><pre class="language-python"><code>session<span class="token punctuation">.</span>create_time_series<span class="token punctuation">(</span>ts_path<span class="token punctuation">,</span> data_type<span class="token punctuation">,</span> encoding<span class="token punctuation">,</span> compressor<span class="token punctuation">,</span>
props<span class="token operator">=</span><span class="token boolean">None</span><span class="token punctuation">,</span> tags<span class="token operator">=</span><span class="token boolean">None</span><span class="token punctuation">,</span> attributes<span class="token operator">=</span><span class="token boolean">None</span><span class="token punctuation">,</span> alias<span class="token operator">=</span><span class="token boolean">None</span><span class="token punctuation">)</span>
session<span class="token punctuation">.</span>create_multi_time_series<span class="token punctuation">(</span>
ts_path_lst<span class="token punctuation">,</span> data_type_lst<span class="token punctuation">,</span> encoding_lst<span class="token punctuation">,</span> compressor_lst<span class="token punctuation">,</span>
props_lst<span class="token operator">=</span><span class="token boolean">None</span><span class="token punctuation">,</span> tags_lst<span class="token operator">=</span><span class="token boolean">None</span><span class="token punctuation">,</span> attributes_lst<span class="token operator">=</span><span class="token boolean">None</span><span class="token punctuation">,</span> alias_lst<span class="token operator">=</span><span class="token boolean">None</span>
<span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Create aligned timeseries</li></ul><div class="language-python line-numbers-mode" data-ext="py"><pre class="language-python"><code>session<span class="token punctuation">.</span>create_aligned_time_series<span class="token punctuation">(</span>
device_id<span class="token punctuation">,</span> measurements_lst<span class="token punctuation">,</span> data_type_lst<span class="token punctuation">,</span> encoding_lst<span class="token punctuation">,</span> compressor_lst
<span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>Attention: Alias of measurements are <strong>not supported</strong> currently.</p><ul><li>Delete one or several timeseries</li></ul><div class="language-python line-numbers-mode" data-ext="py"><pre class="language-python"><code>session<span class="token punctuation">.</span>delete_time_series<span class="token punctuation">(</span>paths_list<span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ul><li>Check whether the specific timeseries exists</li></ul><div class="language-python line-numbers-mode" data-ext="py"><pre class="language-python"><code>session<span class="token punctuation">.</span>check_time_series_exists<span class="token punctuation">(</span>path<span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><h3 id="data-manipulation-interface-dml-interface" tabindex="-1"><a class="header-anchor" href="#data-manipulation-interface-dml-interface" aria-hidden="true">#</a> Data Manipulation Interface (DML Interface)</h3><h4 id="insert" tabindex="-1"><a class="header-anchor" href="#insert" aria-hidden="true">#</a> Insert</h4><p>It is recommended to use insertTablet to help improve write efficiency.</p><ul><li>Insert a Tabletwhich is multiple rows of a device, each row has the same measurements <ul><li><strong>Better Write Performance</strong></li><li><strong>Support null values</strong>: fill the null value with any value, and then mark the null value via BitMap (from v0.13)</li></ul></li></ul><p>We have two implementations of Tablet in Python API.</p><ul><li>Normal Tablet</li></ul><div class="language-python line-numbers-mode" data-ext="py"><pre class="language-python"><code>values_ <span class="token operator">=</span> <span class="token punctuation">[</span>
<span class="token punctuation">[</span><span class="token boolean">False</span><span class="token punctuation">,</span> <span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">11</span><span class="token punctuation">,</span> <span class="token number">1.1</span><span class="token punctuation">,</span> <span class="token number">10011.1</span><span class="token punctuation">,</span> <span class="token string">&quot;test01&quot;</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
<span class="token punctuation">[</span><span class="token boolean">True</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">11111</span><span class="token punctuation">,</span> <span class="token number">1.25</span><span class="token punctuation">,</span> <span class="token number">101.0</span><span class="token punctuation">,</span> <span class="token string">&quot;test02&quot;</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
<span class="token punctuation">[</span><span class="token boolean">False</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">188.1</span><span class="token punctuation">,</span> <span class="token number">688.25</span><span class="token punctuation">,</span> <span class="token string">&quot;test03&quot;</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
<span class="token punctuation">[</span><span class="token boolean">True</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">6.25</span><span class="token punctuation">,</span> <span class="token string">&quot;test04&quot;</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
<span class="token punctuation">]</span>
timestamps_ <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">]</span>
tablet_ <span class="token operator">=</span> Tablet<span class="token punctuation">(</span>
device_id<span class="token punctuation">,</span> measurements_<span class="token punctuation">,</span> data_types_<span class="token punctuation">,</span> values_<span class="token punctuation">,</span> timestamps_
<span class="token punctuation">)</span>
session<span class="token punctuation">.</span>insert_tablet<span class="token punctuation">(</span>tablet_<span class="token punctuation">)</span>
values_ <span class="token operator">=</span> <span class="token punctuation">[</span>
<span class="token punctuation">[</span><span class="token boolean">None</span><span class="token punctuation">,</span> <span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">11</span><span class="token punctuation">,</span> <span class="token number">1.1</span><span class="token punctuation">,</span> <span class="token number">10011.1</span><span class="token punctuation">,</span> <span class="token string">&quot;test01&quot;</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
<span class="token punctuation">[</span><span class="token boolean">True</span><span class="token punctuation">,</span> <span class="token boolean">None</span><span class="token punctuation">,</span> <span class="token number">11111</span><span class="token punctuation">,</span> <span class="token number">1.25</span><span class="token punctuation">,</span> <span class="token number">101.0</span><span class="token punctuation">,</span> <span class="token string">&quot;test02&quot;</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
<span class="token punctuation">[</span><span class="token boolean">False</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token boolean">None</span><span class="token punctuation">,</span> <span class="token number">188.1</span><span class="token punctuation">,</span> <span class="token number">688.25</span><span class="token punctuation">,</span> <span class="token string">&quot;test03&quot;</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
<span class="token punctuation">[</span><span class="token boolean">True</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token boolean">None</span><span class="token punctuation">,</span> <span class="token boolean">None</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
<span class="token punctuation">]</span>
timestamps_ <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token number">16</span><span class="token punctuation">,</span> <span class="token number">17</span><span class="token punctuation">,</span> <span class="token number">18</span><span class="token punctuation">,</span> <span class="token number">19</span><span class="token punctuation">]</span>
tablet_ <span class="token operator">=</span> Tablet<span class="token punctuation">(</span>
device_id<span class="token punctuation">,</span> measurements_<span class="token punctuation">,</span> data_types_<span class="token punctuation">,</span> values_<span class="token punctuation">,</span> timestamps_
<span class="token punctuation">)</span>
session<span class="token punctuation">.</span>insert_tablet<span class="token punctuation">(</span>tablet_<span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Numpy Tablet</li></ul>`,37),h={href:"https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html",target:"_blank",rel:"noopener noreferrer"},v=t(`<p><strong>Notice</strong></p><ol><li>time and numerical value columns in Tablet is ndarray</li><li>recommended to use the specific dtypes to each ndarray, see the example below (if not, the default dtypes are also ok).</li></ol><div class="language-python line-numbers-mode" data-ext="py"><pre class="language-python"><code><span class="token keyword">import</span> numpy <span class="token keyword">as</span> np
data_types_ <span class="token operator">=</span> <span class="token punctuation">[</span>
TSDataType<span class="token punctuation">.</span>BOOLEAN<span class="token punctuation">,</span>
TSDataType<span class="token punctuation">.</span>INT32<span class="token punctuation">,</span>
TSDataType<span class="token punctuation">.</span>INT64<span class="token punctuation">,</span>
TSDataType<span class="token punctuation">.</span>FLOAT<span class="token punctuation">,</span>
TSDataType<span class="token punctuation">.</span>DOUBLE<span class="token punctuation">,</span>
TSDataType<span class="token punctuation">.</span>TEXT<span class="token punctuation">,</span>
<span class="token punctuation">]</span>
np_values_ <span class="token operator">=</span> <span class="token punctuation">[</span>
np<span class="token punctuation">.</span>array<span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token boolean">False</span><span class="token punctuation">,</span> <span class="token boolean">True</span><span class="token punctuation">,</span> <span class="token boolean">False</span><span class="token punctuation">,</span> <span class="token boolean">True</span><span class="token punctuation">]</span><span class="token punctuation">,</span> TSDataType<span class="token punctuation">.</span>BOOLEAN<span class="token punctuation">.</span>np_dtype<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
np<span class="token punctuation">.</span>array<span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span> TSDataType<span class="token punctuation">.</span>INT32<span class="token punctuation">.</span>np_dtype<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
np<span class="token punctuation">.</span>array<span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">11</span><span class="token punctuation">,</span> <span class="token number">11111</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span> TSDataType<span class="token punctuation">.</span>INT64<span class="token punctuation">.</span>np_dtype<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
np<span class="token punctuation">.</span>array<span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1.1</span><span class="token punctuation">,</span> <span class="token number">1.25</span><span class="token punctuation">,</span> <span class="token number">188.1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span> TSDataType<span class="token punctuation">.</span>FLOAT<span class="token punctuation">.</span>np_dtype<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
np<span class="token punctuation">.</span>array<span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">10011.1</span><span class="token punctuation">,</span> <span class="token number">101.0</span><span class="token punctuation">,</span> <span class="token number">688.25</span><span class="token punctuation">,</span> <span class="token number">6.25</span><span class="token punctuation">]</span><span class="token punctuation">,</span> TSDataType<span class="token punctuation">.</span>DOUBLE<span class="token punctuation">.</span>np_dtype<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
np<span class="token punctuation">.</span>array<span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token string">&quot;test01&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;test02&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;test03&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;test04&quot;</span><span class="token punctuation">]</span><span class="token punctuation">,</span> TSDataType<span class="token punctuation">.</span>TEXT<span class="token punctuation">.</span>np_dtype<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token punctuation">]</span>
np_timestamps_ <span class="token operator">=</span> np<span class="token punctuation">.</span>array<span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">]</span><span class="token punctuation">,</span> TSDataType<span class="token punctuation">.</span>INT64<span class="token punctuation">.</span>np_dtype<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
np_tablet_ <span class="token operator">=</span> NumpyTablet<span class="token punctuation">(</span>
device_id<span class="token punctuation">,</span> measurements_<span class="token punctuation">,</span> data_types_<span class="token punctuation">,</span> np_values_<span class="token punctuation">,</span> np_timestamps_
<span class="token punctuation">)</span>
session<span class="token punctuation">.</span>insert_tablet<span class="token punctuation">(</span>np_tablet_<span class="token punctuation">)</span>
<span class="token comment"># insert one numpy tablet with None into the database.</span>
np_values_ <span class="token operator">=</span> <span class="token punctuation">[</span>
np<span class="token punctuation">.</span>array<span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token boolean">False</span><span class="token punctuation">,</span> <span class="token boolean">True</span><span class="token punctuation">,</span> <span class="token boolean">False</span><span class="token punctuation">,</span> <span class="token boolean">True</span><span class="token punctuation">]</span><span class="token punctuation">,</span> TSDataType<span class="token punctuation">.</span>BOOLEAN<span class="token punctuation">.</span>np_dtype<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
np<span class="token punctuation">.</span>array<span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span> TSDataType<span class="token punctuation">.</span>INT32<span class="token punctuation">.</span>np_dtype<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
np<span class="token punctuation">.</span>array<span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">11</span><span class="token punctuation">,</span> <span class="token number">11111</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span> TSDataType<span class="token punctuation">.</span>INT64<span class="token punctuation">.</span>np_dtype<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
np<span class="token punctuation">.</span>array<span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1.1</span><span class="token punctuation">,</span> <span class="token number">1.25</span><span class="token punctuation">,</span> <span class="token number">188.1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span> TSDataType<span class="token punctuation">.</span>FLOAT<span class="token punctuation">.</span>np_dtype<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
np<span class="token punctuation">.</span>array<span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">10011.1</span><span class="token punctuation">,</span> <span class="token number">101.0</span><span class="token punctuation">,</span> <span class="token number">688.25</span><span class="token punctuation">,</span> <span class="token number">6.25</span><span class="token punctuation">]</span><span class="token punctuation">,</span> TSDataType<span class="token punctuation">.</span>DOUBLE<span class="token punctuation">.</span>np_dtype<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
np<span class="token punctuation">.</span>array<span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token string">&quot;test01&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;test02&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;test03&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;test04&quot;</span><span class="token punctuation">]</span><span class="token punctuation">,</span> TSDataType<span class="token punctuation">.</span>TEXT<span class="token punctuation">.</span>np_dtype<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token punctuation">]</span>
np_timestamps_ <span class="token operator">=</span> np<span class="token punctuation">.</span>array<span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">98</span><span class="token punctuation">,</span> <span class="token number">99</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">101</span><span class="token punctuation">]</span><span class="token punctuation">,</span> TSDataType<span class="token punctuation">.</span>INT64<span class="token punctuation">.</span>np_dtype<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
np_bitmaps_ <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span>
<span class="token keyword">for</span> i <span class="token keyword">in</span> <span class="token builtin">range</span><span class="token punctuation">(</span><span class="token builtin">len</span><span class="token punctuation">(</span>measurements_<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">:</span>
np_bitmaps_<span class="token punctuation">.</span>append<span class="token punctuation">(</span>BitMap<span class="token punctuation">(</span><span class="token builtin">len</span><span class="token punctuation">(</span>np_timestamps_<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
np_bitmaps_<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">.</span>mark<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span>
np_bitmaps_<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">.</span>mark<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span>
np_bitmaps_<span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">.</span>mark<span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">)</span>
np_bitmaps_<span class="token punctuation">[</span><span class="token number">4</span><span class="token punctuation">]</span><span class="token punctuation">.</span>mark<span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">)</span>
np_bitmaps_<span class="token punctuation">[</span><span class="token number">5</span><span class="token punctuation">]</span><span class="token punctuation">.</span>mark<span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">)</span>
np_tablet_with_none <span class="token operator">=</span> NumpyTablet<span class="token punctuation">(</span>
device_id<span class="token punctuation">,</span> measurements_<span class="token punctuation">,</span> data_types_<span class="token punctuation">,</span> np_values_<span class="token punctuation">,</span> np_timestamps_<span class="token punctuation">,</span> np_bitmaps_
<span class="token punctuation">)</span>
session<span class="token punctuation">.</span>insert_tablet<span class="token punctuation">(</span>np_tablet_with_none<span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Insert multiple Tablets</li></ul><div class="language-python line-numbers-mode" data-ext="py"><pre class="language-python"><code>session<span class="token punctuation">.</span>insert_tablets<span class="token punctuation">(</span>tablet_lst<span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ul><li>Insert a Record</li></ul><div class="language-python line-numbers-mode" data-ext="py"><pre class="language-python"><code>session<span class="token punctuation">.</span>insert_record<span class="token punctuation">(</span>device_id<span class="token punctuation">,</span> timestamp<span class="token punctuation">,</span> measurements_<span class="token punctuation">,</span> data_types_<span class="token punctuation">,</span> values_<span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ul><li>Insert multiple Records</li></ul><div class="language-python line-numbers-mode" data-ext="py"><pre class="language-python"><code>session<span class="token punctuation">.</span>insert_records<span class="token punctuation">(</span>
device_ids_<span class="token punctuation">,</span> time_list_<span class="token punctuation">,</span> measurements_list_<span class="token punctuation">,</span> data_type_list_<span class="token punctuation">,</span> values_list_
<span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Insert multiple Records that belong to the same device. With type info the server has no need to do type inference, which leads a better performance</li></ul><div class="language-python line-numbers-mode" data-ext="py"><pre class="language-python"><code>session<span class="token punctuation">.</span>insert_records_of_one_device<span class="token punctuation">(</span>device_id<span class="token punctuation">,</span> time_list<span class="token punctuation">,</span> measurements_list<span class="token punctuation">,</span> data_types_list<span class="token punctuation">,</span> values_list<span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><h4 id="insert-with-type-inference" tabindex="-1"><a class="header-anchor" href="#insert-with-type-inference" aria-hidden="true">#</a> Insert with type inference</h4><p>When the data is of String type, we can use the following interface to perform type inference based on the value of the value itself. For example, if value is &quot;true&quot; , it can be automatically inferred to be a boolean type. If value is &quot;3.2&quot; , it can be automatically inferred as a flout type. Without type information, server has to do type inference, which may cost some time.</p><ul><li>Insert a Record, which contains multiple measurement value of a device at a timestamp</li></ul><div class="language-python line-numbers-mode" data-ext="py"><pre class="language-python"><code>session<span class="token punctuation">.</span>insert_str_record<span class="token punctuation">(</span>device_id<span class="token punctuation">,</span> timestamp<span class="token punctuation">,</span> measurements<span class="token punctuation">,</span> string_values<span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><h4 id="insert-of-aligned-timeseries" tabindex="-1"><a class="header-anchor" href="#insert-of-aligned-timeseries" aria-hidden="true">#</a> Insert of Aligned Timeseries</h4><p>The Insert of aligned timeseries uses interfaces like insert_aligned_XXX, and others are similar to the above interfaces:</p><ul><li>insert_aligned_record</li><li>insert_aligned_records</li><li>insert_aligned_records_of_one_device</li><li>insert_aligned_tablet</li><li>insert_aligned_tablets</li></ul><h3 id="iotdb-sql-interface" tabindex="-1"><a class="header-anchor" href="#iotdb-sql-interface" aria-hidden="true">#</a> IoTDB-SQL Interface</h3><ul><li>Execute query statement</li></ul><div class="language-python line-numbers-mode" data-ext="py"><pre class="language-python"><code>session<span class="token punctuation">.</span>execute_query_statement<span class="token punctuation">(</span>sql<span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ul><li>Execute non query statement</li></ul><div class="language-python line-numbers-mode" data-ext="py"><pre class="language-python"><code>session<span class="token punctuation">.</span>execute_non_query_statement<span class="token punctuation">(</span>sql<span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ul><li>Execute statement</li></ul><div class="language-python line-numbers-mode" data-ext="py"><pre class="language-python"><code>session<span class="token punctuation">.</span>execute_statement<span class="token punctuation">(</span>sql<span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><h3 id="schema-template" tabindex="-1"><a class="header-anchor" href="#schema-template" aria-hidden="true">#</a> Schema Template</h3><h4 id="create-schema-template" tabindex="-1"><a class="header-anchor" href="#create-schema-template" aria-hidden="true">#</a> Create Schema Template</h4><p>The step for creating a metadata template is as follows</p><ol><li>Create the template class</li><li>Adding MeasurementNode</li><li>Execute create schema template function</li></ol><div class="language-python line-numbers-mode" data-ext="py"><pre class="language-python"><code>template <span class="token operator">=</span> Template<span class="token punctuation">(</span>name<span class="token operator">=</span>template_name<span class="token punctuation">,</span> share_time<span class="token operator">=</span><span class="token boolean">True</span><span class="token punctuation">)</span>
m_node_x <span class="token operator">=</span> MeasurementNode<span class="token punctuation">(</span><span class="token string">&quot;x&quot;</span><span class="token punctuation">,</span> TSDataType<span class="token punctuation">.</span>FLOAT<span class="token punctuation">,</span> TSEncoding<span class="token punctuation">.</span>RLE<span class="token punctuation">,</span> Compressor<span class="token punctuation">.</span>SNAPPY<span class="token punctuation">)</span>
m_node_y <span class="token operator">=</span> MeasurementNode<span class="token punctuation">(</span><span class="token string">&quot;y&quot;</span><span class="token punctuation">,</span> TSDataType<span class="token punctuation">.</span>FLOAT<span class="token punctuation">,</span> TSEncoding<span class="token punctuation">.</span>RLE<span class="token punctuation">,</span> Compressor<span class="token punctuation">.</span>SNAPPY<span class="token punctuation">)</span>
m_node_z <span class="token operator">=</span> MeasurementNode<span class="token punctuation">(</span><span class="token string">&quot;z&quot;</span><span class="token punctuation">,</span> TSDataType<span class="token punctuation">.</span>FLOAT<span class="token punctuation">,</span> TSEncoding<span class="token punctuation">.</span>RLE<span class="token punctuation">,</span> Compressor<span class="token punctuation">.</span>SNAPPY<span class="token punctuation">)</span>
template<span class="token punctuation">.</span>add_template<span class="token punctuation">(</span>m_node_x<span class="token punctuation">)</span>
template<span class="token punctuation">.</span>add_template<span class="token punctuation">(</span>m_node_y<span class="token punctuation">)</span>
template<span class="token punctuation">.</span>add_template<span class="token punctuation">(</span>m_node_z<span class="token punctuation">)</span>
session<span class="token punctuation">.</span>create_schema_template<span class="token punctuation">(</span>template<span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4 id="modify-schema-template-measurements" tabindex="-1"><a class="header-anchor" href="#modify-schema-template-measurements" aria-hidden="true">#</a> Modify Schema Template measurements</h4><p>Modify measurements in a template, the template must be already created. These are functions that add or delete some measurement nodes.</p><ul><li>add node in template</li></ul><div class="language-python line-numbers-mode" data-ext="py"><pre class="language-python"><code>session<span class="token punctuation">.</span>add_measurements_in_template<span class="token punctuation">(</span>template_name<span class="token punctuation">,</span> measurements_path<span class="token punctuation">,</span> data_types<span class="token punctuation">,</span> encodings<span class="token punctuation">,</span> compressors<span class="token punctuation">,</span> is_aligned<span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ul><li>delete node in template</li></ul><div class="language-python line-numbers-mode" data-ext="py"><pre class="language-python"><code>session<span class="token punctuation">.</span>delete_node_in_template<span class="token punctuation">(</span>template_name<span class="token punctuation">,</span> path<span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><h4 id="set-schema-template" tabindex="-1"><a class="header-anchor" href="#set-schema-template" aria-hidden="true">#</a> Set Schema Template</h4><div class="language-python line-numbers-mode" data-ext="py"><pre class="language-python"><code>session<span class="token punctuation">.</span>set_schema_template<span class="token punctuation">(</span>template_name<span class="token punctuation">,</span> prefix_path<span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><h4 id="uset-schema-template" tabindex="-1"><a class="header-anchor" href="#uset-schema-template" aria-hidden="true">#</a> Uset Schema Template</h4><div class="language-python line-numbers-mode" data-ext="py"><pre class="language-python"><code>session<span class="token punctuation">.</span>unset_schema_template<span class="token punctuation">(</span>template_name<span class="token punctuation">,</span> prefix_path<span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><h4 id="show-schema-template" tabindex="-1"><a class="header-anchor" href="#show-schema-template" aria-hidden="true">#</a> Show Schema Template</h4><ul><li>Show all schema templates</li></ul><div class="language-python line-numbers-mode" data-ext="py"><pre class="language-python"><code>session<span class="token punctuation">.</span>show_all_templates<span class="token punctuation">(</span><span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ul><li>Count all measurements in templates</li></ul><div class="language-python line-numbers-mode" data-ext="py"><pre class="language-python"><code>session<span class="token punctuation">.</span>count_measurements_in_template<span class="token punctuation">(</span>template_name<span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ul><li>Judge whether the path is measurement or not in templates, This measurement must be in the template</li></ul><div class="language-python line-numbers-mode" data-ext="py"><pre class="language-python"><code>session<span class="token punctuation">.</span>count_measurements_in_template<span class="token punctuation">(</span>template_name<span class="token punctuation">,</span> path<span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ul><li>Judge whether the path is exist or not in templates, This path may not belong to the template</li></ul><div class="language-python line-numbers-mode" data-ext="py"><pre class="language-python"><code>session<span class="token punctuation">.</span>is_path_exist_in_template<span class="token punctuation">(</span>template_name<span class="token punctuation">,</span> path<span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ul><li>Show nodes under in schema template</li></ul><div class="language-python line-numbers-mode" data-ext="py"><pre class="language-python"><code>session<span class="token punctuation">.</span>show_measurements_in_template<span class="token punctuation">(</span>template_name<span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ul><li>Show the path prefix where a schema template is set</li></ul><div class="language-python line-numbers-mode" data-ext="py"><pre class="language-python"><code>session<span class="token punctuation">.</span>show_paths_template_set_on<span class="token punctuation">(</span>template_name<span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ul><li>Show the path prefix where a schema template is used (i.e. the time series has been created)</li></ul><div class="language-python line-numbers-mode" data-ext="py"><pre class="language-python"><code>session<span class="token punctuation">.</span>show_paths_template_using_on<span class="token punctuation">(</span>template_name<span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><h4 id="drop-schema-template" tabindex="-1"><a class="header-anchor" href="#drop-schema-template" aria-hidden="true">#</a> Drop Schema Template</h4><p>Delete an existing metadata template,dropping an already set template is not supported</p><div class="language-python line-numbers-mode" data-ext="py"><pre class="language-python"><code>session<span class="token punctuation">.</span>drop_schema_template<span class="token punctuation">(</span><span class="token string">&quot;template_python&quot;</span><span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><h3 id="pandas-support" tabindex="-1"><a class="header-anchor" href="#pandas-support" aria-hidden="true">#</a> Pandas Support</h3>`,59),b={href:"https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html",target:"_blank",rel:"noopener noreferrer"},g=s("code",null,".todf()",-1),y=t(`<p>Example:</p><div class="language-python line-numbers-mode" data-ext="py"><pre class="language-python"><code><span class="token keyword">from</span> iotdb<span class="token punctuation">.</span>Session <span class="token keyword">import</span> Session
ip <span class="token operator">=</span> <span class="token string">&quot;127.0.0.1&quot;</span>
port_ <span class="token operator">=</span> <span class="token string">&quot;6667&quot;</span>
username_ <span class="token operator">=</span> <span class="token string">&quot;root&quot;</span>
password_ <span class="token operator">=</span> <span class="token string">&quot;root&quot;</span>
session <span class="token operator">=</span> Session<span class="token punctuation">(</span>ip<span class="token punctuation">,</span> port_<span class="token punctuation">,</span> username_<span class="token punctuation">,</span> password_<span class="token punctuation">)</span>
session<span class="token punctuation">.</span><span class="token builtin">open</span><span class="token punctuation">(</span><span class="token boolean">False</span><span class="token punctuation">)</span>
result <span class="token operator">=</span> session<span class="token punctuation">.</span>execute_query_statement<span class="token punctuation">(</span><span class="token string">&quot;SELECT * FROM root.*&quot;</span><span class="token punctuation">)</span>
<span class="token comment"># Transform to Pandas Dataset</span>
df <span class="token operator">=</span> result<span class="token punctuation">.</span>todf<span class="token punctuation">(</span><span class="token punctuation">)</span>
session<span class="token punctuation">.</span>close<span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token comment"># Now you can work with the dataframe</span>
df <span class="token operator">=</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="iotdb-testcontainer" tabindex="-1"><a class="header-anchor" href="#iotdb-testcontainer" aria-hidden="true">#</a> IoTDB Testcontainer</h3>`,3),_=s("code",null,"testcontainers",-1),f={href:"https://testcontainers-python.readthedocs.io/en/latest/index.html",target:"_blank",rel:"noopener noreferrer"},T=t(`<p>To start (and stop) an IoTDB Database in a Docker container simply do:</p><div class="language-python line-numbers-mode" data-ext="py"><pre class="language-python"><code><span class="token keyword">class</span> <span class="token class-name">MyTestCase</span><span class="token punctuation">(</span>unittest<span class="token punctuation">.</span>TestCase<span class="token punctuation">)</span><span class="token punctuation">:</span>
<span class="token keyword">def</span> <span class="token function">test_something</span><span class="token punctuation">(</span>self<span class="token punctuation">)</span><span class="token punctuation">:</span>
<span class="token keyword">with</span> IoTDBContainer<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">as</span> c<span class="token punctuation">:</span>
session <span class="token operator">=</span> Session<span class="token punctuation">(</span><span class="token string">&quot;localhost&quot;</span><span class="token punctuation">,</span> c<span class="token punctuation">.</span>get_exposed_port<span class="token punctuation">(</span><span class="token number">6667</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">&quot;root&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;root&quot;</span><span class="token punctuation">)</span>
session<span class="token punctuation">.</span><span class="token builtin">open</span><span class="token punctuation">(</span><span class="token boolean">False</span><span class="token punctuation">)</span>
result <span class="token operator">=</span> session<span class="token punctuation">.</span>execute_query_statement<span class="token punctuation">(</span><span class="token string">&quot;SHOW TIMESERIES&quot;</span><span class="token punctuation">)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span>result<span class="token punctuation">)</span>
session<span class="token punctuation">.</span>close<span class="token punctuation">(</span><span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>by default it will load the image <code>apache/iotdb:latest</code>, if you want a specific version just pass it like e.g. <code>IoTDBContainer(&quot;apache/iotdb:0.12.0&quot;)</code> to get version <code>0.12.0</code> running.</p><h3 id="iotdb-dbapi" tabindex="-1"><a class="header-anchor" href="#iotdb-dbapi" aria-hidden="true">#</a> IoTDB DBAPI</h3>`,4),q={href:"https://peps.python.org/pep-0249/",target:"_blank",rel:"noopener noreferrer"},x=t(`<h4 id="examples" tabindex="-1"><a class="header-anchor" href="#examples" aria-hidden="true">#</a> Examples</h4><ul><li>Initialization</li></ul><p>The initialized parameters are consistent with the session part (except for the sqlalchemy_mode).</p><div class="language-python line-numbers-mode" data-ext="py"><pre class="language-python"><code><span class="token keyword">from</span> iotdb<span class="token punctuation">.</span>dbapi <span class="token keyword">import</span> connect
ip <span class="token operator">=</span> <span class="token string">&quot;127.0.0.1&quot;</span>
port_ <span class="token operator">=</span> <span class="token string">&quot;6667&quot;</span>
username_ <span class="token operator">=</span> <span class="token string">&quot;root&quot;</span>
password_ <span class="token operator">=</span> <span class="token string">&quot;root&quot;</span>
conn <span class="token operator">=</span> connect<span class="token punctuation">(</span>ip<span class="token punctuation">,</span> port_<span class="token punctuation">,</span> username_<span class="token punctuation">,</span> password_<span class="token punctuation">,</span>fetch_size<span class="token operator">=</span><span class="token number">1024</span><span class="token punctuation">,</span>zone_id<span class="token operator">=</span><span class="token string">&quot;UTC+8&quot;</span><span class="token punctuation">,</span>sqlalchemy_mode<span class="token operator">=</span><span class="token boolean">False</span><span class="token punctuation">)</span>
cursor <span class="token operator">=</span> conn<span class="token punctuation">.</span>cursor<span class="token punctuation">(</span><span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>simple SQL statement execution</li></ul><div class="language-python line-numbers-mode" data-ext="py"><pre class="language-python"><code>cursor<span class="token punctuation">.</span>execute<span class="token punctuation">(</span><span class="token string">&quot;SELECT ** FROM root&quot;</span><span class="token punctuation">)</span>
<span class="token keyword">for</span> row <span class="token keyword">in</span> cursor<span class="token punctuation">.</span>fetchall<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">:</span>
<span class="token keyword">print</span><span class="token punctuation">(</span>row<span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>execute SQL with parameter</li></ul><p>IoTDB DBAPI supports pyformat style parameters</p><div class="language-python line-numbers-mode" data-ext="py"><pre class="language-python"><code>cursor<span class="token punctuation">.</span>execute<span class="token punctuation">(</span><span class="token string">&quot;SELECT ** FROM root WHERE time &lt; %(time)s&quot;</span><span class="token punctuation">,</span><span class="token punctuation">{</span><span class="token string">&quot;time&quot;</span><span class="token punctuation">:</span><span class="token string">&quot;2017-11-01T00:08:00.000&quot;</span><span class="token punctuation">}</span><span class="token punctuation">)</span>
<span class="token keyword">for</span> row <span class="token keyword">in</span> cursor<span class="token punctuation">.</span>fetchall<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">:</span>
<span class="token keyword">print</span><span class="token punctuation">(</span>row<span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>execute SQL with parameter sequences</li></ul><div class="language-python line-numbers-mode" data-ext="py"><pre class="language-python"><code>seq_of_parameters <span class="token operator">=</span> <span class="token punctuation">[</span>
<span class="token punctuation">{</span><span class="token string">&quot;timestamp&quot;</span><span class="token punctuation">:</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token string">&quot;temperature&quot;</span><span class="token punctuation">:</span> <span class="token number">1</span><span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">{</span><span class="token string">&quot;timestamp&quot;</span><span class="token punctuation">:</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token string">&quot;temperature&quot;</span><span class="token punctuation">:</span> <span class="token number">2</span><span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">{</span><span class="token string">&quot;timestamp&quot;</span><span class="token punctuation">:</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token string">&quot;temperature&quot;</span><span class="token punctuation">:</span> <span class="token number">3</span><span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">{</span><span class="token string">&quot;timestamp&quot;</span><span class="token punctuation">:</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token string">&quot;temperature&quot;</span><span class="token punctuation">:</span> <span class="token number">4</span><span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">{</span><span class="token string">&quot;timestamp&quot;</span><span class="token punctuation">:</span> <span class="token number">5</span><span class="token punctuation">,</span> <span class="token string">&quot;temperature&quot;</span><span class="token punctuation">:</span> <span class="token number">5</span><span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">]</span>
sql <span class="token operator">=</span> <span class="token string">&quot;insert into root.cursor(timestamp,temperature) values(%(timestamp)s,%(temperature)s)&quot;</span>
cursor<span class="token punctuation">.</span>executemany<span class="token punctuation">(</span>sql<span class="token punctuation">,</span>seq_of_parameters<span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>close the connection and cursor</li></ul><div class="language-python line-numbers-mode" data-ext="py"><pre class="language-python"><code>cursor<span class="token punctuation">.</span>close<span class="token punctuation">(</span><span class="token punctuation">)</span>
conn<span class="token punctuation">.</span>close<span class="token punctuation">(</span><span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="iotdb-sqlalchemy-dialect-experimental" tabindex="-1"><a class="header-anchor" href="#iotdb-sqlalchemy-dialect-experimental" aria-hidden="true">#</a> IoTDB SQLAlchemy Dialect (Experimental)</h3><p>The SQLAlchemy dialect of IoTDB is written to adapt to Apache Superset. This part is still being improved. Please do not use it in the production environment!</p><h4 id="mapping-of-the-metadata" tabindex="-1"><a class="header-anchor" href="#mapping-of-the-metadata" aria-hidden="true">#</a> Mapping of the metadata</h4><p>The data model used by SQLAlchemy is a relational data model, which describes the relationships between different entities through tables. While the data model of IoTDB is a hierarchical data model, which organizes the data through a tree structure. In order to adapt IoTDB to the dialect of SQLAlchemy, the original data model in IoTDB needs to be reorganized. Converting the data model of IoTDB into the data model of SQLAlchemy.</p><p>The metadata in the IoTDB are:</p><ol><li>Database</li><li>Path</li><li>Entity</li><li>Measurement</li></ol><p>The metadata in the SQLAlchemy are:</p><ol><li>Schema</li><li>Table</li><li>Column</li></ol><p>The mapping relationship between them is:</p><table><thead><tr><th>The metadata in the SQLAlchemy</th><th>The metadata in the IoTDB</th></tr></thead><tbody><tr><td>Schema</td><td>Database</td></tr><tr><td>Table</td><td>Path ( from database to entity ) + Entity</td></tr><tr><td>Column</td><td>Measurement</td></tr></tbody></table><p>The following figure shows the relationship between the two more intuitively:</p><figure><img src="https://alioss.timecho.com/docs/img/UserGuide/API/IoTDB-SQLAlchemy/sqlalchemy-to-iotdb.png" alt="sqlalchemy-to-iotdb" tabindex="0" loading="lazy"><figcaption>sqlalchemy-to-iotdb</figcaption></figure><h4 id="data-type-mapping" tabindex="-1"><a class="header-anchor" href="#data-type-mapping" aria-hidden="true">#</a> Data type mapping</h4><table><thead><tr><th>data type in IoTDB</th><th>data type in SQLAlchemy</th></tr></thead><tbody><tr><td>BOOLEAN</td><td>Boolean</td></tr><tr><td>INT32</td><td>Integer</td></tr><tr><td>INT64</td><td>BigInteger</td></tr><tr><td>FLOAT</td><td>Float</td></tr><tr><td>DOUBLE</td><td>Float</td></tr><tr><td>TEXT</td><td>Text</td></tr><tr><td>LONG</td><td>BigInteger</td></tr></tbody></table><h4 id="example" tabindex="-1"><a class="header-anchor" href="#example" aria-hidden="true">#</a> Example</h4><ul><li>execute statement</li></ul><div class="language-python line-numbers-mode" data-ext="py"><pre class="language-python"><code><span class="token keyword">from</span> sqlalchemy <span class="token keyword">import</span> create_engine
engine <span class="token operator">=</span> create_engine<span class="token punctuation">(</span><span class="token string">&quot;iotdb://root:root@127.0.0.1:6667&quot;</span><span class="token punctuation">)</span>
connect <span class="token operator">=</span> engine<span class="token punctuation">.</span>connect<span class="token punctuation">(</span><span class="token punctuation">)</span>
result <span class="token operator">=</span> connect<span class="token punctuation">.</span>execute<span class="token punctuation">(</span><span class="token string">&quot;SELECT ** FROM root&quot;</span><span class="token punctuation">)</span>
<span class="token keyword">for</span> row <span class="token keyword">in</span> result<span class="token punctuation">.</span>fetchall<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">:</span>
<span class="token keyword">print</span><span class="token punctuation">(</span>row<span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>ORM (now only simple queries are supported)</li></ul><div class="language-python line-numbers-mode" data-ext="py"><pre class="language-python"><code><span class="token keyword">from</span> sqlalchemy <span class="token keyword">import</span> create_engine<span class="token punctuation">,</span> Column<span class="token punctuation">,</span> Float<span class="token punctuation">,</span> BigInteger<span class="token punctuation">,</span> MetaData
<span class="token keyword">from</span> sqlalchemy<span class="token punctuation">.</span>ext<span class="token punctuation">.</span>declarative <span class="token keyword">import</span> declarative_base
<span class="token keyword">from</span> sqlalchemy<span class="token punctuation">.</span>orm <span class="token keyword">import</span> sessionmaker
metadata <span class="token operator">=</span> MetaData<span class="token punctuation">(</span>
schema<span class="token operator">=</span><span class="token string">&#39;root.factory&#39;</span>
<span class="token punctuation">)</span>
Base <span class="token operator">=</span> declarative_base<span class="token punctuation">(</span>metadata<span class="token operator">=</span>metadata<span class="token punctuation">)</span>
<span class="token keyword">class</span> <span class="token class-name">Device</span><span class="token punctuation">(</span>Base<span class="token punctuation">)</span><span class="token punctuation">:</span>
__tablename__ <span class="token operator">=</span> <span class="token string">&quot;room2.device1&quot;</span>
Time <span class="token operator">=</span> Column<span class="token punctuation">(</span>BigInteger<span class="token punctuation">,</span> primary_key<span class="token operator">=</span><span class="token boolean">True</span><span class="token punctuation">)</span>
temperature <span class="token operator">=</span> Column<span class="token punctuation">(</span>Float<span class="token punctuation">)</span>
status <span class="token operator">=</span> Column<span class="token punctuation">(</span>Float<span class="token punctuation">)</span>
engine <span class="token operator">=</span> create_engine<span class="token punctuation">(</span><span class="token string">&quot;iotdb://root:root@127.0.0.1:6667&quot;</span><span class="token punctuation">)</span>
DbSession <span class="token operator">=</span> sessionmaker<span class="token punctuation">(</span>bind<span class="token operator">=</span>engine<span class="token punctuation">)</span>
session <span class="token operator">=</span> DbSession<span class="token punctuation">(</span><span class="token punctuation">)</span>
res <span class="token operator">=</span> session<span class="token punctuation">.</span>query<span class="token punctuation">(</span>Device<span class="token punctuation">.</span>status<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token builtin">filter</span><span class="token punctuation">(</span>Device<span class="token punctuation">.</span>temperature <span class="token operator">&gt;</span> <span class="token number">1</span><span class="token punctuation">)</span>
<span class="token keyword">for</span> row <span class="token keyword">in</span> res<span class="token punctuation">:</span>
<span class="token keyword">print</span><span class="token punctuation">(</span>row<span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="developers" tabindex="-1"><a class="header-anchor" href="#developers" aria-hidden="true">#</a> Developers</h2><h3 id="introduction" tabindex="-1"><a class="header-anchor" href="#introduction" aria-hidden="true">#</a> Introduction</h3><p>This is an example of how to connect to IoTDB with python, using the thrift rpc interfaces. Things are almost the same on Windows or Linux, but pay attention to the difference like path separator.</p><h3 id="prerequisites" tabindex="-1"><a class="header-anchor" href="#prerequisites" aria-hidden="true">#</a> Prerequisites</h3><p>Python3.7 or later is preferred.</p><p>You have to install Thrift (0.11.0 or later) to compile our thrift file into python code. Below is the official tutorial of installation, eventually, you should have a thrift executable.</p><div class="language-text line-numbers-mode" data-ext="text"><pre class="language-text"><code>http://thrift.apache.org/docs/install/
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><p>Before starting you need to install <code>requirements_dev.txt</code> in your python environment, e.g. by calling</p><div class="language-bash line-numbers-mode" data-ext="sh"><pre class="language-bash"><code>pip <span class="token function">install</span> <span class="token parameter variable">-r</span> requirements_dev.txt
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><h3 id="compile-the-thrift-library-and-debug" tabindex="-1"><a class="header-anchor" href="#compile-the-thrift-library-and-debug" aria-hidden="true">#</a> Compile the thrift library and Debug</h3><p>In the root of IoTDB&#39;s source code folder, run <code>mvn clean generate-sources -pl client-py -am</code>.</p><p>This will automatically delete and repopulate the folder <code>iotdb/thrift</code> with the generated thrift files. This folder is ignored from git and should <strong>never be pushed to git!</strong></p><p><strong>Notice</strong> Do not upload <code>iotdb/thrift</code> to the git repo.</p><h3 id="session-client-example" tabindex="-1"><a class="header-anchor" href="#session-client-example" aria-hidden="true">#</a> Session Client &amp; Example</h3><p>We packed up the Thrift interface in <code>client-py/src/iotdb/Session.py</code> (similar with its Java counterpart), also provided an example file <code>client-py/src/SessionExample.py</code> of how to use the session module. please read it carefully.</p><p>Or, another simple example:</p><div class="language-python line-numbers-mode" data-ext="py"><pre class="language-python"><code><span class="token keyword">from</span> iotdb<span class="token punctuation">.</span>Session <span class="token keyword">import</span> Session
ip <span class="token operator">=</span> <span class="token string">&quot;127.0.0.1&quot;</span>
port_ <span class="token operator">=</span> <span class="token string">&quot;6667&quot;</span>
username_ <span class="token operator">=</span> <span class="token string">&quot;root&quot;</span>
password_ <span class="token operator">=</span> <span class="token string">&quot;root&quot;</span>
session <span class="token operator">=</span> Session<span class="token punctuation">(</span>ip<span class="token punctuation">,</span> port_<span class="token punctuation">,</span> username_<span class="token punctuation">,</span> password_<span class="token punctuation">)</span>
session<span class="token punctuation">.</span><span class="token builtin">open</span><span class="token punctuation">(</span><span class="token boolean">False</span><span class="token punctuation">)</span>
zone <span class="token operator">=</span> session<span class="token punctuation">.</span>get_time_zone<span class="token punctuation">(</span><span class="token punctuation">)</span>
session<span class="token punctuation">.</span>close<span class="token punctuation">(</span><span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="tests" tabindex="-1"><a class="header-anchor" href="#tests" aria-hidden="true">#</a> Tests</h3><p>Please add your custom tests in <code>tests</code> folder.</p><p>To run all defined tests just type <code>pytest .</code> in the root folder.</p>`,52),w=s("strong",null,"Notice",-1),S={href:"https://testcontainers-python.readthedocs.io/en/latest/index.html",target:"_blank",rel:"noopener noreferrer"},D=s("h3",{id:"futher-tools",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#futher-tools","aria-hidden":"true"},"#"),n(" Futher Tools")],-1),I={href:"https://pypi.org/project/black/",target:"_blank",rel:"noopener noreferrer"},N={href:"https://pypi.org/project/flake8/",target:"_blank",rel:"noopener noreferrer"},E=s("code",null,"black .",-1),A=s("code",null,"flake8 .",-1),B=t('<h2 id="releasing" tabindex="-1"><a class="header-anchor" href="#releasing" aria-hidden="true">#</a> Releasing</h2><p>To do a release just ensure that you have the right set of generated thrift files. Then run linting and auto-formatting. Then, ensure that all tests work (via <code>pytest .</code>). Then you are good to go to do a release!</p><h3 id="preparing-your-environment" tabindex="-1"><a class="header-anchor" href="#preparing-your-environment" aria-hidden="true">#</a> Preparing your environment</h3><p>First, install all necessary dev dependencies via <code>pip install -r requirements_dev.txt</code>.</p><h3 id="doing-the-release" tabindex="-1"><a class="header-anchor" href="#doing-the-release" aria-hidden="true">#</a> Doing the Release</h3><p>There is a convenient script <code>release.sh</code> to do all steps for a release. Namely, these are</p><ul><li>Remove all transient directories from last release (if exists)</li><li>(Re-)generate all generated sources via mvn</li><li>Run Linting (flake8)</li><li>Run Tests via pytest</li><li>Build</li><li>Release to pypi</li></ul>',7);function L(C,F){const a=o("ExternalLinkIcon");return i(),c("div",null,[l(`
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.
`),r,s("p",null,[n("You can get an example of using the package to read and write data at here: "),s("a",d,[n("Example"),e(a)])]),s("p",null,[n("An example of aligned timeseries: "),s("a",k,[n("Aligned Timeseries Session Example"),e(a)])]),m,s("p",null,[n("Comparing with Tablet, Numpy Tablet is using "),s("a",h,[n("numpy.ndarray"),e(a)]),n(" to record data. With less memory footprint and time cost of serialization, the insert performance will be better.")]),v,s("p",null,[n("To easily transform a query result to a "),s("a",b,[n("Pandas Dataframe"),e(a)]),n(" the SessionDataSet has a method "),g,n(" which consumes the dataset and transforms it to a pandas dataframe.")]),y,s("p",null,[n("The Test Support is based on the lib "),_,n(" ("),s("a",f,[n("https://testcontainers-python.readthedocs.io/en/latest/index.html"),e(a)]),n(") which you need to install in your project if you want to use the feature.")]),T,s("p",null,[n("IoTDB DBAPI implements the Python DB API 2.0 specification ("),s("a",q,[n("https://peps.python.org/pep-0249/"),e(a)]),n("), which defines a common interface for accessing databases in Python.")]),x,s("p",null,[w,n(" Some tests need docker to be started on your system as a test instance is started in a docker container using "),s("a",S,[n("testcontainers"),e(a)]),n(".")]),D,s("p",null,[s("a",I,[n("black"),e(a)]),n(" and "),s("a",N,[n("flake8"),e(a)]),n(" are installed for autoformatting and linting. Both can be run by "),E,n(" or "),A,n(" respectively.")]),B])}const O=p(u,[["render",L],["__file","Programming-Python-Native-API.html.vue"]]);export{O as default};