<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Michael</title>
    <description>The latest articles on DEV Community by Michael (@michaelfv).</description>
    <link>https://dev.to/michaelfv</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3830930%2F34d5c2f8-f162-4df3-865b-34a96a64ac17.png</url>
      <title>DEV Community: Michael</title>
      <link>https://dev.to/michaelfv</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/michaelfv"/>
    <language>en</language>
    <item>
      <title>Managing the FoundationDB Cluster in GCDW: Start/Stop, Scale, Replace, and Upgrade</title>
      <dc:creator>Michael</dc:creator>
      <pubDate>Thu, 30 Jul 2026 12:50:00 +0000</pubDate>
      <link>https://dev.to/michaelfv/managing-the-foundationdb-cluster-in-gcdw-startstop-scale-replace-and-upgrade-2ggb</link>
      <guid>https://dev.to/michaelfv/managing-the-foundationdb-cluster-in-gcdw-startstop-scale-replace-and-upgrade-2ggb</guid>
      <description>&lt;p&gt;FoundationDB serves as the metadata backbone for GCDW (GBase Cloud Data Warehouse). Keeping it healthy is essential for the entire &lt;strong&gt;gbase database&lt;/strong&gt; platform. This guide covers the core operational tasks — service control, cluster file handling, node expansion, safe removal, hardware replacement, and version upgrades — using a 3‑node FDB cluster as the example.&lt;/p&gt;

&lt;h2&gt;
  
  
  Service Lifecycle and Auto‑Start
&lt;/h2&gt;

&lt;p&gt;FoundationDB uses &lt;code&gt;fdbmonitor&lt;/code&gt; to supervise &lt;code&gt;fdbserver&lt;/code&gt; and &lt;code&gt;backup_agent&lt;/code&gt;, while systemd supervises &lt;code&gt;fdbmonitor&lt;/code&gt;. All commands must be run on each node individually.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Start&lt;/span&gt;
systemctl start foundationdb

&lt;span class="c"&gt;# Stop&lt;/span&gt;
systemctl stop foundationdb

&lt;span class="c"&gt;# Check status (Active: active (running) indicates normal)&lt;/span&gt;
systemctl status foundationdb

&lt;span class="c"&gt;# Disable auto‑start on boot&lt;/span&gt;
systemctl disable foundationdb

&lt;span class="c"&gt;# Enable auto‑start on boot&lt;/span&gt;
systemctl &lt;span class="nb"&gt;enable &lt;/span&gt;foundationdb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Cluster File Management
&lt;/h2&gt;

&lt;p&gt;The cluster connection string is stored in &lt;code&gt;/etc/foundationdb/fdb.cluster&lt;/code&gt; and is identical on every node. Its format is &lt;code&gt;description:ID@IP:PORT,IP:PORT,...&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Specify a custom cluster file for clients&lt;/strong&gt;: &lt;code&gt;fdbcli -C /path/to/fdb.cluster&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;In APIs&lt;/strong&gt;: Python's &lt;code&gt;fdb.open(cluster_file=...)&lt;/code&gt; or Java's &lt;code&gt;FDB.open(path)&lt;/code&gt; accept a custom path.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Environment variable&lt;/strong&gt;: Set &lt;code&gt;FDB_CLUSTER_FILE&lt;/code&gt; (lower priority than the &lt;code&gt;‑C&lt;/code&gt; flag, higher than the default location).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Retrieve current cluster info&lt;/strong&gt; from a connected session:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  fdb&amp;gt; get &lt;span class="se"&gt;\x&lt;/span&gt;FF&lt;span class="se"&gt;\x&lt;/span&gt;FF/cluster_file_path    &lt;span class="c"&gt;# file path&lt;/span&gt;
  fdb&amp;gt; get &lt;span class="se"&gt;\x&lt;/span&gt;FF&lt;span class="se"&gt;\x&lt;/span&gt;FF/connection_string    &lt;span class="c"&gt;# connection string&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Expanding the Cluster: Adding Nodes
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Install the FoundationDB packages on the new node.&lt;/li&gt;
&lt;li&gt;Copy the existing &lt;code&gt;/etc/foundationdb/fdb.cluster&lt;/code&gt; to the same path on the new node.&lt;/li&gt;
&lt;li&gt;Restart the FDB service:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   systemctl restart foundationdb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The new node will automatically join and start serving data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Shrinking the Cluster: Removing Nodes
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Verify redundancy&lt;/strong&gt;: Ensure the remaining nodes still meet the redundancy mode (e.g., &lt;code&gt;double&lt;/code&gt; requires at least 2 machines).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reconfigure coordinators&lt;/strong&gt; (if the node being removed is a coordinator):
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   fdb&amp;gt; coordinators 10.0.2.81:4500 10.0.2.82:4500
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Exclude the node&lt;/strong&gt; to trigger data migration:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   fdb&amp;gt; exclude 10.0.2.83:4500
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;This operation can take a while. Pressing &lt;code&gt;Ctrl+C&lt;/code&gt; only stops the progress display; the data movement continues in the background.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;fdb&amp;gt; exclude&lt;/code&gt; to see the current exclusion list.

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Stop and remove the service&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   systemctl stop foundationdb
   systemctl disable foundationdb
   yum remove foundationdb-server foundationdb-client
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Rollback&lt;/strong&gt;: To cancel an exclusion, run &lt;code&gt;fdb&amp;gt; include all&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Replacing a Machine
&lt;/h2&gt;

&lt;p&gt;A replacement is simply a combination of expansion and shrinkage: add the new node, wait for data rebalancing, then &lt;code&gt;exclude&lt;/code&gt; and remove the old node.&lt;/p&gt;

&lt;h2&gt;
  
  
  Uninstallation and Upgrades
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Uninstall&lt;/strong&gt;: Remove the RPM packages directly.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  rpm &lt;span class="nt"&gt;-e&lt;/span&gt; foundationdb-clients foundationdb-server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Upgrade&lt;/strong&gt;: Run the RPM upgrade on every node. All nodes must be upgraded to the same version.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  rpm &lt;span class="nt"&gt;-Uvh&lt;/span&gt; foundationdb-clients-7.2.3-1.el7.x86_64.rpm foundationdb-server-7.2.3-1.el7.x86_64.rpm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;p&gt;Mastering FoundationDB's start/stop, cluster file, and scaling procedures is essential for maintaining the high availability of your GCDW metadata layer. Always verify &lt;code&gt;fdb.cluster&lt;/code&gt; permissions, and double‑check your redundancy policy before changing coordinators or running &lt;code&gt;exclude&lt;/code&gt;. With these practices, your &lt;strong&gt;gbase database&lt;/strong&gt; infrastructure will remain solid and predictable.&lt;/p&gt;

</description>
      <category>gbase</category>
      <category>database</category>
      <category>数据库</category>
    </item>
    <item>
      <title>Monitoring FoundationDB in GCDW: A Deep Dive into the status Command</title>
      <dc:creator>Michael</dc:creator>
      <pubDate>Thu, 30 Jul 2026 12:20:00 +0000</pubDate>
      <link>https://dev.to/michaelfv/monitoring-foundationdb-in-gcdw-a-deep-dive-into-the-status-command-2l9j</link>
      <guid>https://dev.to/michaelfv/monitoring-foundationdb-in-gcdw-a-deep-dive-into-the-status-command-2l9j</guid>
      <description>&lt;p&gt;GCDW (GBase Cloud Data Warehouse) relies on FoundationDB (FDB) for metadata storage. The &lt;code&gt;fdbcli&lt;/code&gt; tool's &lt;code&gt;status&lt;/code&gt; command provides a comprehensive snapshot of cluster health, redundancy, load, and resource consumption. This guide explains every key section of the &lt;code&gt;status&lt;/code&gt; and &lt;code&gt;status details&lt;/code&gt; output for your &lt;strong&gt;gbase database&lt;/strong&gt; infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  At a Glance: What to Check First
&lt;/h2&gt;

&lt;p&gt;Run &lt;code&gt;status&lt;/code&gt; inside &lt;code&gt;fdb&amp;gt;&lt;/code&gt; and focus on these vital signs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Redundancy mode&lt;/strong&gt; – &lt;code&gt;single&lt;/code&gt;/&lt;code&gt;double&lt;/code&gt;/&lt;code&gt;triple&lt;/code&gt;; defines your replica count.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fault Tolerance&lt;/strong&gt; – maximum nodes that can fail without data loss. &lt;strong&gt;0 means any single node failure loses data&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Replication health&lt;/strong&gt; – must be &lt;code&gt;Healthy&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memory availability&lt;/strong&gt; – per‑process available RAM; a warning appears below &lt;strong&gt;4 GB&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Conflict rate&lt;/strong&gt; – high values indicate transaction contention.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Key Output Sections
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Section&lt;/th&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Configuration&lt;/td&gt;
&lt;td&gt;Redundancy mode&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;double&lt;/code&gt; = 2 replicas; &lt;code&gt;triple&lt;/code&gt; = 3 replicas&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Storage engine&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;ssd-2&lt;/code&gt; (large datasets) or &lt;code&gt;memory-2&lt;/code&gt; (small, fast)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Coordinators&lt;/td&gt;
&lt;td&gt;Odd number recommended (e.g., 3)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cluster&lt;/td&gt;
&lt;td&gt;FoundationDB processes&lt;/td&gt;
&lt;td&gt;Total FDB server processes; one per CPU core, ≥4 GB RAM each&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Fault Tolerance&lt;/td&gt;
&lt;td&gt;Number of machines that can fail; 0 = no redundancy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data&lt;/td&gt;
&lt;td&gt;Replication health&lt;/td&gt;
&lt;td&gt;Must be &lt;code&gt;Healthy&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Moving data&lt;/td&gt;
&lt;td&gt;Non‑zero during scaling or recovery&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Disk space used&lt;/td&gt;
&lt;td&gt;Total disk consumed by the cluster&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Workload&lt;/td&gt;
&lt;td&gt;Read / Write rate&lt;/td&gt;
&lt;td&gt;Current throughput in Hz&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Transactions started / committed&lt;/td&gt;
&lt;td&gt;Transactional throughput&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Conflict rate&lt;/td&gt;
&lt;td&gt;Rate of transaction conflicts&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Switching the Storage Engine
&lt;/h2&gt;

&lt;p&gt;You can change the storage engine online without downtime:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;fdb&amp;gt; configure ssd         &lt;span class="c"&gt;# switch to SSD engine&lt;/span&gt;
fdb&amp;gt; configure memory-3    &lt;span class="c"&gt;# switch to memory engine&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SSD engine&lt;/strong&gt;: Persists data on disk. Best for large datasets. Space reclamation after deletes is delayed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memory engine&lt;/strong&gt;: Keeps data in memory, logs to disk. Best for small, fast workloads.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Per‑Process Details with status details
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;status details&lt;/code&gt; exposes resource usage for every FDB server process:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Process performance details:
  10.0.2.81:4500 (  4% cpu;  5% machine; 0.000 Gbps;  1% disk IO; 0.5 GB / 2.7 GB RAM )
  10.0.2.82:4500 (  6% cpu;  2% machine; 0.000 Gbps;  1% disk IO; 0.4 GB / 2.8 GB RAM )
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each line shows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;cpu&lt;/strong&gt; – single‑core CPU usage of the process.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;machine&lt;/strong&gt; – overall CPU utilisation of the host.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gbps&lt;/strong&gt; – combined network throughput.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;disk IO&lt;/strong&gt; – disk busy percentage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RAM&lt;/strong&gt; – physical memory used by the process / total available per process on that host.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Coordination server reachability is also listed, helping you quickly spot network partitions or down nodes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Operational Best Practices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Keep &lt;strong&gt;Fault Tolerance ≥ 1&lt;/strong&gt; in production. Prefer &lt;code&gt;double&lt;/code&gt; redundancy for safety.&lt;/li&gt;
&lt;li&gt;Never ignore memory warnings – insufficient RAM leads to OOM kills and performance collapse.&lt;/li&gt;
&lt;li&gt;Monitor &lt;strong&gt;Conflict rate&lt;/strong&gt; routinely; a persistent spike usually indicates a hot key or poor data model design.&lt;/li&gt;
&lt;li&gt;During scaling or node replacements, track &lt;strong&gt;Moving data&lt;/strong&gt; to know when rebalancing completes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Mastering the &lt;code&gt;status&lt;/code&gt; command gives you full visibility into the FoundationDB layer of your GCDW &lt;strong&gt;gbase database&lt;/strong&gt;, keeping the metadata backbone healthy and performant.&lt;/p&gt;

</description>
      <category>gbase</category>
      <category>database</category>
      <category>数据库</category>
      <category>monitoring</category>
    </item>
    <item>
      <title>GBase 8a Load vs. Export Syntax Comparison</title>
      <dc:creator>Michael</dc:creator>
      <pubDate>Thu, 30 Jul 2026 11:50:00 +0000</pubDate>
      <link>https://dev.to/michaelfv/gbase-8a-load-vs-export-syntax-comparison-km9</link>
      <guid>https://dev.to/michaelfv/gbase-8a-load-vs-export-syntax-comparison-km9</guid>
      <description>&lt;p&gt;GBase 8a provides robust data loading (&lt;code&gt;LOAD DATA INFILE&lt;/code&gt;) and data export (&lt;code&gt;SELECT INTO OUTFILE&lt;/code&gt;) capabilities. While both share many syntactic elements, they also have distinct features. This article compares the core parameters side by side, with practical export examples for your &lt;strong&gt;gbase database&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Core Parameter Comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Attribute&lt;/th&gt;
&lt;th&gt;Load&lt;/th&gt;
&lt;th&gt;Export&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Basic Syntax&lt;/td&gt;
&lt;td&gt;&lt;code&gt;LOAD DATA INFILE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SELECT INTO OUTFILE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;File&lt;/td&gt;
&lt;td&gt;&lt;code&gt;file_list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;file_name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Load supports multiple files; export only a single file name&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Character Set&lt;/td&gt;
&lt;td&gt;&lt;code&gt;CHARACTER SET&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;CHARACTER SET&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data Format&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DATA_FORMAT&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Load‑only, e.g., &lt;code&gt;DATA_FORMAT 6&lt;/code&gt; for JSON&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data Format with Line Separator&lt;/td&gt;
&lt;td&gt;&lt;code&gt;HAVING LINES SEPARATOR&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NULL Value&lt;/td&gt;
&lt;td&gt;&lt;code&gt;NULL_VALUE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;NULL_VALUE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Load: ≤15 chars; Export: ≤32 chars, default &lt;code&gt;\N&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Field Delimiter&lt;/td&gt;
&lt;td&gt;&lt;code&gt;TERMINATED BY&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;TERMINATED BY&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Load: ≤15 chars; Export: ≤10 chars&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Field Enclosure&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ENCLOSED BY&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[OPTIONALLY] ENCLOSED BY&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Single character; &lt;code&gt;OPTIONALLY&lt;/code&gt; only for character types&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Preserve Blanks&lt;/td&gt;
&lt;td&gt;`PRESERVE [LEADING \&lt;/td&gt;
&lt;td&gt;TRAILING] BLANKS`&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Autofill&lt;/td&gt;
&lt;td&gt;&lt;code&gt;AUTOFILL&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fixed Length&lt;/td&gt;
&lt;td&gt;&lt;code&gt;LENGTH&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;LENGTH&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Fixed‑width mode&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Column Mapping&lt;/td&gt;
&lt;td&gt;&lt;code&gt;TABLE_FIELDS&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Line Terminator&lt;/td&gt;
&lt;td&gt;&lt;code&gt;LINES TERMINATED BY&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;LINES TERMINATED BY&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Max 10 chars&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Max Bad Records&lt;/td&gt;
&lt;td&gt;&lt;code&gt;MAX_BAD_RECORDS&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Date/Time Formats&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;DATETIME FORMAT&lt;/code&gt;, &lt;code&gt;DATE FORMAT&lt;/code&gt;, &lt;code&gt;TIMESTAMP FORMAT&lt;/code&gt;, &lt;code&gt;TIME FORMAT&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Load; export formats specified in &lt;code&gt;TABLE_FIELDS&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Error Logging&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;TRACE&lt;/code&gt;, &lt;code&gt;TRACE_PATH&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No File Split&lt;/td&gt;
&lt;td&gt;&lt;code&gt;NOSPLIT&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Parallelism&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;PARALLEL&lt;/code&gt;, &lt;code&gt;MAX_DATA_PROCESSORS&lt;/code&gt;, &lt;code&gt;MIN_CHUNK_SIZE&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skip Missing Files&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SKIP_BAD_FILE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Set Column Values&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SET&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skip Header Lines&lt;/td&gt;
&lt;td&gt;&lt;code&gt;IGNORE NUM LINES&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;File Compression&lt;/td&gt;
&lt;td&gt;&lt;code&gt;FILE_FORMAT&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;UNDEFINED, UNCOMPRESSED, GZIP, SNAPPY, LZO&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Escape Character&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ESCAPED BY&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Export; default &lt;code&gt;\&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BLOB Handling&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;BLOBMODE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Export: &lt;code&gt;TYPE_TEXT&lt;/code&gt;, &lt;code&gt;TYPE_BASE64&lt;/code&gt;, &lt;code&gt;TYPE_URL&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Line Prefix&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;LINES STARTING BY&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Export&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Double‑Enclosure Escaping&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DOUBLE_ENCLOSED BY&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Export&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Export Destination&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;OUTFILEMODE BY&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;LOCAL&lt;/code&gt; or &lt;code&gt;HDFS&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Write Mode&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;WRITEMODE BY&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;NORMAL&lt;/code&gt; or &lt;code&gt;OVERWRITES&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Parallel File Count&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;FILECOUNT&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;HDFS export only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Max File Size&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;FILESIZE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Export; supports k/K/m/M/g/G suffix&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Header Row&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;WITH HEAD&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Optional for local exports&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Export Examples
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Add a Prefix to Each Line
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;test&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;OUTFILE&lt;/span&gt; &lt;span class="s1"&gt;'/home/gbase/test.txt'&lt;/span&gt;
&lt;span class="n"&gt;FIELDS&lt;/span&gt; &lt;span class="n"&gt;TERMINATED&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="s1"&gt;'|'&lt;/span&gt;
&lt;span class="n"&gt;DOUBLE_ENCLOSED&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="s1"&gt;','&lt;/span&gt;
&lt;span class="n"&gt;ESCAPED&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s1"&gt;'&lt;/span&gt;
&lt;span class="n"&gt;WRITEMODE&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;OVERWRITES&lt;/span&gt;
&lt;span class="n"&gt;LINES&lt;/span&gt; &lt;span class="n"&gt;STARTING&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="s1"&gt;'----'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This prepends &lt;code&gt;----&lt;/code&gt; to every output line, useful for embedding metadata.&lt;/p&gt;

&lt;h3&gt;
  
  
  Split Large Exports by File Size
&lt;/h3&gt;

&lt;p&gt;When &lt;code&gt;FILESIZE&lt;/code&gt; is specified, the export automatically splits into multiple files. The first file keeps the original name, and subsequent files get suffixes like &lt;code&gt;_p1&lt;/code&gt;, &lt;code&gt;_p2&lt;/code&gt;, etc. This is particularly useful for large datasets in a &lt;strong&gt;gbase database&lt;/strong&gt; environment where downstream processing expects manageable file sizes.&lt;/p&gt;

</description>
      <category>gbase</category>
      <category>database</category>
      <category>数据库</category>
    </item>
    <item>
      <title>Temporarily Changing Session‑Level Parameters in GBase 8a</title>
      <dc:creator>Michael</dc:creator>
      <pubDate>Thu, 30 Jul 2026 11:01:50 +0000</pubDate>
      <link>https://dev.to/michaelfv/temporarily-changing-session-level-parameters-in-gbase-8a-4ldi</link>
      <guid>https://dev.to/michaelfv/temporarily-changing-session-level-parameters-in-gbase-8a-4ldi</guid>
      <description>&lt;p&gt;Some parameters in GBase 8a can be modified at the session level, affecting only the current connection. When using connection pools, it's a good practice to save the original value, apply the temporary change, and restore it afterwards to avoid impacting subsequent queries. Here's the safe workflow for a &lt;strong&gt;gbase database&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Steps
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Save the current value&lt;/strong&gt; – Use &lt;code&gt;SELECT @@parameter_name&lt;/code&gt; and store it in a user variable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Change the parameter&lt;/strong&gt; – Use &lt;code&gt;SET parameter_name = new_value&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Restore the parameter&lt;/strong&gt; – After the specific query completes, &lt;code&gt;SET parameter_name = @saved_variable&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Complete Example
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- 1. Inspect and save the current value&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;@@&lt;/span&gt;&lt;span class="n"&gt;estimate_func_max_len&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;-- Returns 0&lt;/span&gt;
&lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;bak&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;@@&lt;/span&gt;&lt;span class="n"&gt;estimate_func_max_len&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;-- 2. Temporarily change the parameter&lt;/span&gt;
&lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="n"&gt;estimate_func_max_len&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;32700&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;SHOW&lt;/span&gt; &lt;span class="n"&gt;VARIABLES&lt;/span&gt; &lt;span class="k"&gt;LIKE&lt;/span&gt; &lt;span class="s1"&gt;'esti%'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;-- Shows Value = 32700&lt;/span&gt;

&lt;span class="c1"&gt;-- 3. Restore the original value&lt;/span&gt;
&lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="n"&gt;estimate_func_max_len&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;bak&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;SHOW&lt;/span&gt; &lt;span class="n"&gt;VARIABLES&lt;/span&gt; &lt;span class="k"&gt;LIKE&lt;/span&gt; &lt;span class="s1"&gt;'esti%'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;-- Shows Value = 0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This pattern lets you tune parameters for specific queries without permanently altering the session environment, keeping your &lt;strong&gt;gbase database&lt;/strong&gt; connections clean and predictable.&lt;/p&gt;

</description>
      <category>gbase</category>
      <category>database</category>
      <category>数据库</category>
    </item>
    <item>
      <title>Loading JSON Data Files in GBase 8a</title>
      <dc:creator>Michael</dc:creator>
      <pubDate>Tue, 28 Jul 2026 15:40:00 +0000</pubDate>
      <link>https://dev.to/michaelfv/loading-json-data-files-in-gbase-8a-1flo</link>
      <guid>https://dev.to/michaelfv/loading-json-data-files-in-gbase-8a-1flo</guid>
      <description>&lt;p&gt;Starting from version 9.5.3.28, GBase 8a supports loading JSON files directly into tables. By specifying &lt;code&gt;DATA_FORMAT 6&lt;/code&gt; in the &lt;code&gt;LOAD DATA INFILE&lt;/code&gt; statement, each JSON object is automatically mapped to table columns. This article covers common JSON loading patterns and important caveats for your &lt;strong&gt;gbase database&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Basic Syntax
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;LOAD&lt;/span&gt; &lt;span class="k"&gt;DATA&lt;/span&gt; &lt;span class="n"&gt;INFILE&lt;/span&gt; &lt;span class="s1"&gt;'file_path'&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="k"&gt;table_name&lt;/span&gt; &lt;span class="n"&gt;DATA_FORMAT&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Loading Patterns
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Single JSON Object (One Row)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"First"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Loads one row. Column names in the JSON must match the table columns.&lt;/p&gt;

&lt;h3&gt;
  
  
  One JSON Object Per Line
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"First"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"2"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"second no comer between line"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each line is treated as an independent record. Trailing commas at the end of lines are optional and safely ignored.&lt;/p&gt;

&lt;h3&gt;
  
  
  Multiple JSON Objects on a Single Line
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Compact form (no separator)&lt;/strong&gt;: Objects placed directly next to each other are parsed correctly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;{"id":"1","name":"First"}{"id":"2","name":"second"}&lt;/code&gt; → two rows.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Comma separated (without array)&lt;/strong&gt;: A comma between objects causes only the first object to load; subsequent objects are skipped.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;JSON Array&lt;/strong&gt;: Wrap objects in &lt;code&gt;[...]&lt;/code&gt; and separate with commas. All objects in the array are loaded.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;[{"id":"1","name":"First"},{"id":"2","name":"second"}]&lt;/code&gt; → two rows.&lt;/p&gt;

&lt;h3&gt;
  
  
  Mixed‑Format Files
&lt;/h3&gt;

&lt;p&gt;You can combine lines with single objects, compact objects, and arrays in the same file. The parser handles each line independently.&lt;/p&gt;

&lt;h2&gt;
  
  
  Important Limitations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No nested JSON values&lt;/strong&gt;: A column value cannot be another JSON object or array. The structure must be flat.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;File splitting restrictions&lt;/strong&gt;: If the JSON data is compact (no delimiters between objects) or the values themselves contain the line terminator, the file cannot be split across multiple loader processes. In such cases the entire file is processed as a single unit, which bypasses the per‑line length limit but requires the entire content to be syntactically perfect.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Literal constants&lt;/strong&gt;: JSON keywords &lt;code&gt;true&lt;/code&gt;, &lt;code&gt;false&lt;/code&gt;, and &lt;code&gt;null&lt;/code&gt; must be written in &lt;strong&gt;lowercase&lt;/strong&gt; and must &lt;strong&gt;not&lt;/strong&gt; be enclosed in double quotes. Any deviation will cause a parsing error.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;JSON loading in a &lt;strong&gt;gbase database&lt;/strong&gt; makes ingesting semi‑structured data straightforward. By following these patterns, you can seamlessly integrate JSON log streams, IoT data, or API responses into your GBASE analytical pipelines without external preprocessing.&lt;/p&gt;

</description>
      <category>gbase</category>
      <category>database</category>
      <category>数据库</category>
    </item>
    <item>
      <title>GBase 8a initcap: Capitalizing the First Letter of Every Word</title>
      <dc:creator>Michael</dc:creator>
      <pubDate>Tue, 28 Jul 2026 14:50:00 +0000</pubDate>
      <link>https://dev.to/michaelfv/gbase-8a-initcap-capitalizing-the-first-letter-of-every-word-1ckh</link>
      <guid>https://dev.to/michaelfv/gbase-8a-initcap-capitalizing-the-first-letter-of-every-word-1ckh</guid>
      <description>&lt;p&gt;The &lt;code&gt;initcap&lt;/code&gt; function in GBase 8a capitalizes the first letter of each word in a string and converts the rest to lowercase. It's a handy tool for normalising names, titles, and other text fields in a &lt;strong&gt;gbase database&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Syntax
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="n"&gt;INITCAP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;expr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;expr&lt;/code&gt;: a string expression — a column, a literal, or a function result.&lt;/li&gt;
&lt;li&gt;Letters are determined by the Unicode Letter category, covering English, pinyin, Chinese characters, Japanese kana, and Western European letters.&lt;/li&gt;
&lt;li&gt;Words are delimited by spaces, tabs, newlines, full‑width spaces, and punctuation marks (commas, hyphens, underscores, etc.).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Examples
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Basic English Text
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="n"&gt;gbase&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;INITCAP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'hello wORLD'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;------------------------+&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;INITCAP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'hello wORLD'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;------------------------+&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;Hello&lt;/span&gt; &lt;span class="n"&gt;World&lt;/span&gt;            &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;------------------------+&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Full‑Width Pinyin
&lt;/h3&gt;

&lt;p&gt;Full‑width letters are treated the same way.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="n"&gt;gbase&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;INITCAP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'ａｂｃ'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;----------------------+&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;INITCAP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'ａｂｃ'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;----------------------+&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="err"&gt;Ａｂｃ&lt;/span&gt;               &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;----------------------+&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Various Delimiters
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;initcap&lt;/code&gt; recognises a wide range of separators, so words split by punctuation, hyphens, underscores, or full‑width spaces are each capitalised independently.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="n"&gt;gbase&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;INITCAP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'hello,wORLD'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;------------------------+&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;INITCAP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'hello,wORLD'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;------------------------+&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;Hello&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;World&lt;/span&gt;            &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;------------------------+&lt;/span&gt;

&lt;span class="n"&gt;gbase&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;INITCAP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'hello-wORLD'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;------------------------+&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;INITCAP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'hello-wORLD'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;------------------------+&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;Hello&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;World&lt;/span&gt;            &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;------------------------+&lt;/span&gt;

&lt;span class="n"&gt;gbase&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;INITCAP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'hello_wORLD'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;------------------------+&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;INITCAP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'hello_wORLD'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;------------------------+&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;Hello_World&lt;/span&gt;            &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;------------------------+&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;initcap&lt;/code&gt; is a simple yet powerful string formatting function in GBase 8a. Use it whenever you need to present text in a consistent, capitalised format directly within your SQL queries.&lt;/p&gt;

</description>
      <category>gbase</category>
      <category>database</category>
      <category>数据库</category>
      <category>sql</category>
    </item>
    <item>
      <title>GBase 8a date_trunc: Truncating Date/Time to a Specified Precision</title>
      <dc:creator>Michael</dc:creator>
      <pubDate>Tue, 28 Jul 2026 14:20:00 +0000</pubDate>
      <link>https://dev.to/michaelfv/gbase-8a-datetrunc-truncating-datetime-to-a-specified-precision-32dm</link>
      <guid>https://dev.to/michaelfv/gbase-8a-datetrunc-truncating-datetime-to-a-specified-precision-32dm</guid>
      <description>&lt;p&gt;The &lt;code&gt;date_trunc&lt;/code&gt; function in GBase 8a truncates a date/time value to the specified precision. Everything below that precision is set to its minimal value (e.g., truncating to month resets the day, hour, minute, and second to the first day of the month at 00:00:00). This is extremely useful for time‑series aggregation and data alignment in a &lt;strong&gt;gbase database&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Syntax
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="n"&gt;date_trunc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;type&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;date&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;type&lt;/code&gt;: the precision to truncate to, such as &lt;code&gt;year&lt;/code&gt;, &lt;code&gt;quarter&lt;/code&gt;, &lt;code&gt;month&lt;/code&gt;, &lt;code&gt;week&lt;/code&gt;, &lt;code&gt;day&lt;/code&gt;, &lt;code&gt;hour&lt;/code&gt;, &lt;code&gt;minute&lt;/code&gt;, &lt;code&gt;second&lt;/code&gt;, &lt;code&gt;century&lt;/code&gt;, &lt;code&gt;decade&lt;/code&gt;, &lt;code&gt;millennium&lt;/code&gt;, &lt;code&gt;milliseconds&lt;/code&gt;, &lt;code&gt;microseconds&lt;/code&gt;. Both quoted and unquoted forms are accepted.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;date&lt;/code&gt;: a datetime expression (usually &lt;code&gt;DATETIME&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Common Truncation Types
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;type&lt;/th&gt;
&lt;th&gt;Truncation Effect&lt;/th&gt;
&lt;th&gt;Example Output for &lt;code&gt;'2023-04-21 11:12:13.56789'&lt;/code&gt;
&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;year&lt;/td&gt;
&lt;td&gt;Resets to Jan 1 00:00:00&lt;/td&gt;
&lt;td&gt;&lt;code&gt;2023-01-01 00:00:00&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;quarter&lt;/td&gt;
&lt;td&gt;First day of the quarter 00:00:00&lt;/td&gt;
&lt;td&gt;&lt;code&gt;2023-04-01 00:00:00&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;month&lt;/td&gt;
&lt;td&gt;First day of the month 00:00:00&lt;/td&gt;
&lt;td&gt;&lt;code&gt;2023-04-01 00:00:00&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;week&lt;/td&gt;
&lt;td&gt;Monday of the week 00:00:00&lt;/td&gt;
&lt;td&gt;&lt;code&gt;2023-04-17 00:00:00&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;day&lt;/td&gt;
&lt;td&gt;Time set to 00:00:00&lt;/td&gt;
&lt;td&gt;&lt;code&gt;2023-04-21 00:00:00&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;hour&lt;/td&gt;
&lt;td&gt;Minutes and seconds set to zero&lt;/td&gt;
&lt;td&gt;&lt;code&gt;2023-04-21 11:00:00&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;minute&lt;/td&gt;
&lt;td&gt;Seconds set to zero&lt;/td&gt;
&lt;td&gt;&lt;code&gt;2023-04-21 11:12:00&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;second&lt;/td&gt;
&lt;td&gt;Sub‑seconds set to zero&lt;/td&gt;
&lt;td&gt;&lt;code&gt;2023-04-21 11:12:13&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;century&lt;/td&gt;
&lt;td&gt;First day of the century&lt;/td&gt;
&lt;td&gt;&lt;code&gt;2001-01-01 00:00:00&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;decade&lt;/td&gt;
&lt;td&gt;First day of the decade&lt;/td&gt;
&lt;td&gt;&lt;code&gt;2020-01-01 00:00:00&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;millennium&lt;/td&gt;
&lt;td&gt;First day of the millennium&lt;/td&gt;
&lt;td&gt;&lt;code&gt;2001-01-01 00:00:00&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;milliseconds&lt;/td&gt;
&lt;td&gt;Microseconds set to zero&lt;/td&gt;
&lt;td&gt;&lt;code&gt;2023-04-21 11:12:13.567000&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;microseconds&lt;/td&gt;
&lt;td&gt;Sub‑microseconds set to zero&lt;/td&gt;
&lt;td&gt;&lt;code&gt;2023-04-21 11:12:13.567890&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: &lt;code&gt;week&lt;/code&gt; respects the &lt;code&gt;default_week_format&lt;/code&gt; parameter; a date at the very beginning of a year may belong to the last week of the previous year.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Examples
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Truncate to year&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;date_trunc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;year&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'2023-04-21 11:12:13.56789'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;-- Result: 2023-01-01 00:00:00&lt;/span&gt;

&lt;span class="c1"&gt;-- Truncate to quarter&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;date_trunc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;quarter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'2023-04-21 11:12:13.56789'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;-- Result: 2023-04-01 00:00:00&lt;/span&gt;

&lt;span class="c1"&gt;-- Truncate to month&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;date_trunc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;month&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'2023-04-21 11:12:13.56789'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;-- Result: 2023-04-01 00:00:00&lt;/span&gt;

&lt;span class="c1"&gt;-- Truncate to week (Monday of the week)&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;date_trunc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;week&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'2023-04-21 11:12:13.56789'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;-- Result: 2023-04-17 00:00:00&lt;/span&gt;

&lt;span class="c1"&gt;-- A date at the start of the year may fall into the previous year's week&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;date_trunc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;week&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'2023-01-01 11:12:13.56789'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;-- Result: 2022-12-26 00:00:00&lt;/span&gt;

&lt;span class="c1"&gt;-- Truncate to day&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;date_trunc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;day&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'2023-04-21 11:12:13.56789'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;-- Result: 2023-04-21 00:00:00&lt;/span&gt;

&lt;span class="c1"&gt;-- Truncate to hour&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;date_trunc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hour&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'2023-04-21 11:12:13.56789'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;-- Result: 2023-04-21 11:00:00&lt;/span&gt;

&lt;span class="c1"&gt;-- Truncate to minute&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;date_trunc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;minute&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'2023-04-21 11:12:13.56789'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;-- Result: 2023-04-21 11:12:00&lt;/span&gt;

&lt;span class="c1"&gt;-- Truncate to second&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;date_trunc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;second&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'2023-04-21 11:12:13.56789'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;-- Result: 2023-04-21 11:12:13&lt;/span&gt;

&lt;span class="c1"&gt;-- Truncate to century&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;date_trunc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;century&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'2023-04-21 11:12:13.56789'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;-- Result: 2001-01-01 00:00:00&lt;/span&gt;

&lt;span class="c1"&gt;-- Truncate to decade&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;date_trunc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;decade&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'2023-04-21 11:12:13.56789'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;-- Result: 2020-01-01 00:00:00&lt;/span&gt;

&lt;span class="c1"&gt;-- Truncate to millennium&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;date_trunc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;millennium&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'2023-04-21 11:12:13.56789'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;-- Result: 2001-01-01 00:00:00&lt;/span&gt;

&lt;span class="c1"&gt;-- Truncate to millisecond&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;date_trunc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;milliseconds&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'2023-04-21 11:12:13.56789'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;-- Result: 2023-04-21 11:12:13.567000&lt;/span&gt;

&lt;span class="c1"&gt;-- Truncate to microsecond&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;date_trunc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;microseconds&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'2023-04-21 11:12:13.56789'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;-- Result: 2023-04-21 11:12:13.567890&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;date_trunc&lt;/code&gt; is an essential function for time‑based analytics in a &lt;strong&gt;gbase database&lt;/strong&gt;. It simplifies aggregating data by fixed intervals and aligning timestamps across different sources. Combine it with &lt;code&gt;date_part&lt;/code&gt; or &lt;code&gt;extract&lt;/code&gt; for even more control over your time‑series queries in GBASE's MPP cluster.&lt;/p&gt;

</description>
      <category>gbase</category>
      <category>database</category>
      <category>数据库</category>
    </item>
    <item>
      <title>GBase 8a Mirror Cluster: Using Fewer High‑Spec Nodes for Backup</title>
      <dc:creator>Michael</dc:creator>
      <pubDate>Tue, 28 Jul 2026 13:50:00 +0000</pubDate>
      <link>https://dev.to/michaelfv/gbase-8a-mirror-cluster-using-fewer-high-spec-nodes-for-backup-42bj</link>
      <guid>https://dev.to/michaelfv/gbase-8a-mirror-cluster-using-fewer-high-spec-nodes-for-backup-42bj</guid>
      <description>&lt;p&gt;In a GBase 8a mirror cluster, the standard recommendation is to keep the primary and backup clusters topologically identical. However, for real‑time backup scenarios, you can use a smaller number of high‑capacity nodes for the backup cluster. This guide demonstrates a working configuration with a 3‑node cluster in a &lt;strong&gt;gbase database&lt;/strong&gt;, where the primary cluster has 2 nodes and the backup cluster has only 1 node.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test Environment
&lt;/h2&gt;

&lt;p&gt;Three nodes are split into two virtual clusters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;VC1&lt;/strong&gt;: 2 nodes (101, 102), each with &lt;strong&gt;1 primary shard&lt;/strong&gt; (p1 d0), giving a total of 2 primary shards.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;VC2&lt;/strong&gt;: 1 node (115), configured with &lt;strong&gt;2 primary shards&lt;/strong&gt; (p2 d0), also giving a total of 2 primary shards.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The prerequisites for mirroring are met because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Both VCs have the &lt;strong&gt;same number of primary shards&lt;/strong&gt; (2).&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;hashmaps are identical&lt;/strong&gt; (VC2 initialises its nodedatamap from VC1).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Creating the Mirror Database
&lt;/h2&gt;

&lt;p&gt;Initialise the hashmaps and set up the mirror relationship:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Initialise VC1&lt;/span&gt;
&lt;span class="n"&gt;USE&lt;/span&gt; &lt;span class="n"&gt;VC&lt;/span&gt; &lt;span class="n"&gt;vc1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;INITNODEDATAMAP&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;-- Initialise VC2 from VC1 to ensure identical hashmaps&lt;/span&gt;
&lt;span class="n"&gt;USE&lt;/span&gt; &lt;span class="n"&gt;VC&lt;/span&gt; &lt;span class="n"&gt;vc2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;INITNODEDATAMAP&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;vc1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;-- Create the database on both VCs&lt;/span&gt;
&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;DATABASE&lt;/span&gt; &lt;span class="n"&gt;vc1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;testdb&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;DATABASE&lt;/span&gt; &lt;span class="n"&gt;vc2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;testdb&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;-- Set VC1.testdb to mirror to VC2&lt;/span&gt;
&lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="k"&gt;DATABASE&lt;/span&gt; &lt;span class="n"&gt;vc1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;testdb&lt;/span&gt; &lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="k"&gt;DEFAULT&lt;/span&gt; &lt;span class="n"&gt;MIRROR&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;vc2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;-- Verify the mirror relationship&lt;/span&gt;
&lt;span class="k"&gt;SHOW&lt;/span&gt; &lt;span class="n"&gt;MIRROR&lt;/span&gt; &lt;span class="n"&gt;DATABASES&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The output confirms that &lt;code&gt;testdb&lt;/code&gt; now has &lt;code&gt;MIRROR_VC = vc2&lt;/code&gt;, indicating the mirror is active.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verifying Mirror Replication
&lt;/h2&gt;

&lt;p&gt;Create a table and insert data on VC1, then check that it appears on VC2:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="n"&gt;USE&lt;/span&gt; &lt;span class="n"&gt;VC&lt;/span&gt; &lt;span class="n"&gt;vc1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;USE&lt;/span&gt; &lt;span class="n"&gt;testdb&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;t1&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="nb"&gt;INT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="nb"&gt;VARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;t1&lt;/span&gt; &lt;span class="k"&gt;VALUES&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'From vc1'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;-- Query on VC1&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;vc1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;testdb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;t1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;-- Output: | 1 | From vc1 |&lt;/span&gt;

&lt;span class="c1"&gt;-- Query on VC2 — data is automatically synchronised&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;vc2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;testdb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;t1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;-- Output: | 1 | From vc1 |&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Key Prerequisites for Mirroring
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Equal number of primary shards&lt;/strong&gt;: Both VCs must have the same total count of primary segments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Identical hashmaps&lt;/strong&gt;: VC2 must be initialised with &lt;code&gt;initnodedatamap from vc1&lt;/code&gt;, ensuring that the &lt;code&gt;nodedatamap&lt;/code&gt; table has the same &lt;code&gt;data_distribution_id&lt;/code&gt; count and content on both sides.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can verify hashmap consistency with this query:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="k"&gt;DISTINCT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="k"&gt;COUNT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="k"&gt;COUNT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;
    &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;gbase&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;nodedatamap&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;
    &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;data_distribution_id&lt;/span&gt; &lt;span class="k"&gt;IN&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;GROUP&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;hashkey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;nodeid&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;res&lt;/span&gt;
&lt;span class="k"&gt;GROUP&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A correct setup returns a single row with &lt;code&gt;count(res.r) = 65536&lt;/code&gt;, confirming the hashmaps match.&lt;/p&gt;

&lt;p&gt;This configuration proves that a &lt;strong&gt;gbase database&lt;/strong&gt; mirror cluster can operate with an asymmetric topology — fewer backup nodes — as long as the shard count and hashmap alignment rules are strictly followed. This approach saves hardware while still providing real‑time data protection.&lt;/p&gt;

</description>
      <category>gbase</category>
      <category>database</category>
      <category>数据库</category>
      <category>cluster</category>
    </item>
    <item>
      <title>Exporting Fixed‑Length Data Files in GBase 8a</title>
      <dc:creator>Michael</dc:creator>
      <pubDate>Tue, 28 Jul 2026 13:20:00 +0000</pubDate>
      <link>https://dev.to/michaelfv/exporting-fixed-length-data-files-in-gbase-8a-33kj</link>
      <guid>https://dev.to/michaelfv/exporting-fixed-length-data-files-in-gbase-8a-33kj</guid>
      <description>&lt;p&gt;Fixed‑length (or "positional") exports eliminate the need for field delimiters, which is especially useful when your data contains characters that are hard to escape. In a &lt;strong&gt;gbase database&lt;/strong&gt;, you can export query results as fixed‑width records using the &lt;code&gt;SELECT INTO OUTFILE&lt;/code&gt; command with specific options.&lt;/p&gt;

&lt;h2&gt;
  
  
  Syntax for Fixed‑Length Exports
&lt;/h2&gt;

&lt;p&gt;There are three ways to produce a fixed‑length file:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Explicit field lengths&lt;/strong&gt; – &lt;code&gt;SELECT ... INTO OUTFILE '...' FIELDS length(len1, len2, ...)&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Empty terminators and enclosures&lt;/strong&gt; – &lt;code&gt;SELECT ... INTO OUTFILE '...' FIELDS TERMINATED BY '' ENCLOSED BY '' ESCAPED BY ''&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Empty terminators only&lt;/strong&gt; – &lt;code&gt;SELECT ... INTO OUTFILE '...' FIELDS TERMINATED BY '' ESCAPED BY ''&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Important&lt;/strong&gt;: You cannot mix the &lt;code&gt;length&lt;/code&gt; option with &lt;code&gt;TERMINATED BY&lt;/code&gt; or &lt;code&gt;ENCLOSED BY&lt;/code&gt; – doing so will cause a syntax error.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Method 1: Explicit Field Lengths
&lt;/h2&gt;

&lt;p&gt;Use &lt;code&gt;FIELDS length()&lt;/code&gt; to define the exact byte width for each column. Each data type has a minimum width that must be respected.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Data Type&lt;/th&gt;
&lt;th&gt;Minimum Length (bytes)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;TINYINT&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SMALLINT&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;INT&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BIGINT&lt;/td&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DECIMAL(P,S)&lt;/td&gt;
&lt;td&gt;P + 2 (if S &amp;gt; 0) or P + 1 (if S = 0)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VARCHAR(N) (UTF8)&lt;/td&gt;
&lt;td&gt;N × 3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VARCHAR(N) (UTF8MB4)&lt;/td&gt;
&lt;td&gt;N × 4&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Export table t1, where id is INT and f1 is VARCHAR(10) in UTF8&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;t1&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;OUTFILE&lt;/span&gt; &lt;span class="s1"&gt;'/home/gbase/t1.zxq'&lt;/span&gt;
&lt;span class="n"&gt;FIELDS&lt;/span&gt; &lt;span class="k"&gt;length&lt;/span&gt; &lt;span class="s1"&gt;'11,30'&lt;/span&gt; &lt;span class="n"&gt;WRITEMODE&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;OVERWRITES&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the specified length is smaller than the actual byte size of the data, the content will be truncated. For instance, a &lt;code&gt;VARCHAR(10)&lt;/code&gt; column in UTF8 needs at least 30 bytes; providing only 2 bytes would output just the first 2 bytes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Method 2 &amp;amp; 3: Empty Delimiters and Escape Characters
&lt;/h2&gt;

&lt;p&gt;If you don't want to calculate lengths manually, simply set the field terminator, enclosure, and escape character to empty strings. The engine then outputs each column at its maximum defined width automatically.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Option A: Clear all three&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;t1&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;OUTFILE&lt;/span&gt; &lt;span class="s1"&gt;'/home/gbase/t1.zxq'&lt;/span&gt;
&lt;span class="n"&gt;FIELDS&lt;/span&gt; &lt;span class="n"&gt;TERMINATED&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="s1"&gt;''&lt;/span&gt; &lt;span class="n"&gt;ENCLOSED&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="s1"&gt;''&lt;/span&gt; &lt;span class="n"&gt;ESCAPED&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="s1"&gt;''&lt;/span&gt;
&lt;span class="n"&gt;WRITEMODE&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;OVERWRITES&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;-- Option B: Clear only terminator and escape&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;t1&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;OUTFILE&lt;/span&gt; &lt;span class="s1"&gt;'/home/gbase/t1.zxq'&lt;/span&gt;
&lt;span class="n"&gt;FIELDS&lt;/span&gt; &lt;span class="n"&gt;TERMINATED&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="s1"&gt;''&lt;/span&gt; &lt;span class="n"&gt;ESCAPED&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="s1"&gt;''&lt;/span&gt;
&lt;span class="n"&gt;WRITEMODE&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;OVERWRITES&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Both options produce fixed‑length output and are functionally identical. They are more convenient than specifying explicit lengths, but they don't allow you to customise column widths.&lt;/p&gt;

&lt;p&gt;Fixed‑length exports are a reliable way to handle complex data exchange scenarios. Choose the method that best balances flexibility and simplicity for your specific &lt;strong&gt;gbase database&lt;/strong&gt; workload.&lt;/p&gt;

</description>
      <category>gbase</category>
      <category>database</category>
      <category>数据库</category>
      <category>sql</category>
    </item>
    <item>
      <title>Does GBase 8a V95 SetSysEnv.py Require the root User?</title>
      <dc:creator>Michael</dc:creator>
      <pubDate>Tue, 28 Jul 2026 12:48:59 +0000</pubDate>
      <link>https://dev.to/michaelfv/does-gbase-8a-v95-setsysenvpy-require-the-root-user-foc</link>
      <guid>https://dev.to/michaelfv/does-gbase-8a-v95-setsysenvpy-require-the-root-user-foc</guid>
      <description>&lt;p&gt;In GBase 8a V8, installation, upgrades, and service management all required root privileges. Starting with V95, all database services run under a non‑root &lt;code&gt;dbauser&lt;/code&gt; (typically &lt;code&gt;gbase&lt;/code&gt;). However, certain environment setup operations, such as running &lt;code&gt;SetSysEnv.py&lt;/code&gt;, still need root‑level permissions to adjust system limits. This does &lt;strong&gt;not&lt;/strong&gt; mean you must log in as &lt;code&gt;root&lt;/code&gt; or know the root password — you can use &lt;code&gt;sudo&lt;/code&gt; instead.&lt;/p&gt;

&lt;h2&gt;
  
  
  Running SetSysEnv.py with sudo
&lt;/h2&gt;

&lt;p&gt;The following example shows the &lt;code&gt;gbase&lt;/code&gt; user successfully executing &lt;code&gt;SetSysEnv.py&lt;/code&gt; via &lt;code&gt;sudo&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;gbase@gbase_rh7_015 ~]&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo&lt;/span&gt; ./SetSysEnv.py &lt;span class="nt"&gt;--dbaUser&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;gbase
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Checking the log confirms the script ran with root privileges and applied the necessary system settings:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;[gbase@gbase_rh7_015 ~]$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;tail&lt;/span&gt; /tmp/SetSysEnv.log
&lt;span class="go"&gt;2023-04-24 09:37:31,733-root-INFO Set system max memory size to end.
2023-04-24 09:37:31,770-root-INFO Set system virtual memory...
2023-04-24 09:37:31,810-root-INFO exec cmd:su - gbase -c "ulimit -v",and return value:unlimited
2023-04-24 09:37:31,811-root-INFO Modify system env end.
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As long as the &lt;code&gt;gbase&lt;/code&gt; user has &lt;code&gt;sudo&lt;/code&gt; privileges, &lt;code&gt;SetSysEnv.py&lt;/code&gt; can complete its tasks without ever needing the root password. This is the recommended approach in environments where direct root access is restricted.&lt;/p&gt;

&lt;p&gt;In a &lt;strong&gt;gbase database&lt;/strong&gt; V95 deployment, remember that daily operations run as &lt;code&gt;gbase&lt;/code&gt;, but one‑time environment setup still requires a privilege escalation step — and &lt;code&gt;sudo&lt;/code&gt; is the safe and standard way to do it.&lt;/p&gt;

</description>
      <category>gbase</category>
      <category>database</category>
      <category>数据库</category>
    </item>
    <item>
      <title>GBase 8a date_part and extract: Extracting Date/Time Components</title>
      <dc:creator>Michael</dc:creator>
      <pubDate>Mon, 27 Jul 2026 15:45:00 +0000</pubDate>
      <link>https://dev.to/michaelfv/gbase-8a-datepart-and-extract-extracting-datetime-components-37ln</link>
      <guid>https://dev.to/michaelfv/gbase-8a-datepart-and-extract-extracting-datetime-components-37ln</guid>
      <description>&lt;p&gt;GBase 8a provides two functions for extracting specific parts of a date or time value: &lt;code&gt;date_part&lt;/code&gt; and &lt;code&gt;extract&lt;/code&gt;. They are equivalent in functionality — &lt;code&gt;date_part&lt;/code&gt; has a simpler syntax, while &lt;code&gt;extract&lt;/code&gt; follows the Oracle‑compatible style. Both support a wide range of extraction types, from year and month down to microseconds.&lt;/p&gt;

&lt;h2&gt;
  
  
  Syntax
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- date_part: type can be quoted or unquoted&lt;/span&gt;
&lt;span class="n"&gt;date_part&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;type&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;date&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;-- extract&lt;/span&gt;
&lt;span class="k"&gt;extract&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;type&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="nb"&gt;date&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;type&lt;/code&gt;: the component to extract, e.g. &lt;code&gt;year&lt;/code&gt;, &lt;code&gt;month&lt;/code&gt;, &lt;code&gt;day&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;date&lt;/code&gt;: a datetime expression (usually &lt;code&gt;DATETIME&lt;/code&gt;; &lt;code&gt;DATE&lt;/code&gt; values are auto‑cast).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Quick Reference of Common Types
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;type&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Example Output&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;year&lt;/td&gt;
&lt;td&gt;Year&lt;/td&gt;
&lt;td&gt;2023&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;month&lt;/td&gt;
&lt;td&gt;Month&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;day&lt;/td&gt;
&lt;td&gt;Day&lt;/td&gt;
&lt;td&gt;23&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;hour&lt;/td&gt;
&lt;td&gt;Hour&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;minute&lt;/td&gt;
&lt;td&gt;Minute&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;second&lt;/td&gt;
&lt;td&gt;Second&lt;/td&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;quarter&lt;/td&gt;
&lt;td&gt;Quarter (1–4)&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;week&lt;/td&gt;
&lt;td&gt;Week of year&lt;/td&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;dow&lt;/td&gt;
&lt;td&gt;Day of week (Sunday=0)&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;isodow&lt;/td&gt;
&lt;td&gt;ISO day of week (Monday=1, Sunday=7)&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;doy&lt;/td&gt;
&lt;td&gt;Day of year&lt;/td&gt;
&lt;td&gt;113&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;epoch&lt;/td&gt;
&lt;td&gt;Unix timestamp (with microseconds)&lt;/td&gt;
&lt;td&gt;1682219533.56789&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;year_month&lt;/td&gt;
&lt;td&gt;Year and month&lt;/td&gt;
&lt;td&gt;202304&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;day_hour&lt;/td&gt;
&lt;td&gt;Day and hour&lt;/td&gt;
&lt;td&gt;2311&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;hour_minute&lt;/td&gt;
&lt;td&gt;Hour and minute&lt;/td&gt;
&lt;td&gt;1112&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;minute_second&lt;/td&gt;
&lt;td&gt;Minute and second&lt;/td&gt;
&lt;td&gt;1213&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;millisecond&lt;/td&gt;
&lt;td&gt;Millisecond (integer)&lt;/td&gt;
&lt;td&gt;567&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;microsecond&lt;/td&gt;
&lt;td&gt;Microsecond (integer)&lt;/td&gt;
&lt;td&gt;567890&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;century&lt;/td&gt;
&lt;td&gt;Century&lt;/td&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;decade&lt;/td&gt;
&lt;td&gt;Decade (year ÷ 10)&lt;/td&gt;
&lt;td&gt;202&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;millennium&lt;/td&gt;
&lt;td&gt;Millennium&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;milliseconds&lt;/td&gt;
&lt;td&gt;Seconds + milliseconds (decimal)&lt;/td&gt;
&lt;td&gt;13567.89&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;microseconds&lt;/td&gt;
&lt;td&gt;Seconds + microseconds (integer)&lt;/td&gt;
&lt;td&gt;13567890&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Typical Examples
&lt;/h2&gt;

&lt;p&gt;All examples use &lt;code&gt;date_part&lt;/code&gt;; &lt;code&gt;extract&lt;/code&gt; produces identical results.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Year&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;date_part&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;year&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'2023-04-23 11:12:13.56789'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;      &lt;span class="c1"&gt;-- 2023&lt;/span&gt;

&lt;span class="c1"&gt;-- Month&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;date_part&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;month&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'2023-04-23 11:12:13.56789'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;     &lt;span class="c1"&gt;-- 4&lt;/span&gt;

&lt;span class="c1"&gt;-- Day&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;date_part&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;day&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'2023-04-23 11:12:13.56789'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;       &lt;span class="c1"&gt;-- 23&lt;/span&gt;

&lt;span class="c1"&gt;-- Hour&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;date_part&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hour&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'2023-04-23 11:12:13.56789'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;      &lt;span class="c1"&gt;-- 11&lt;/span&gt;

&lt;span class="c1"&gt;-- Minute&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;date_part&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;minute&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'2023-04-23 11:12:13.56789'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;    &lt;span class="c1"&gt;-- 12&lt;/span&gt;

&lt;span class="c1"&gt;-- Second&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;date_part&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;second&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'2023-04-23 11:12:13.56789'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;    &lt;span class="c1"&gt;-- 13&lt;/span&gt;

&lt;span class="c1"&gt;-- Millisecond (truncates the fractional seconds)&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;date_part&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;millisecond&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'2023-04-23 11:12:13.56789'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;-- 567&lt;/span&gt;

&lt;span class="c1"&gt;-- Microsecond&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;date_part&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;microsecond&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'2023-04-23 11:12:13.56789'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;-- 567890&lt;/span&gt;

&lt;span class="c1"&gt;-- Year and month as an integer (202304)&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;date_part&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;year_month&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'2023-04-23 11:12:13.56789'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;-- Day and hour as an integer (2311)&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;date_part&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;day_hour&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'2023-04-23 11:12:13.56789'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;-- Hour and minute as an integer (1112)&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;date_part&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hour_minute&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'2023-04-23 11:12:13.56789'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;-- Minute and second as an integer (1213)&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;date_part&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;minute_second&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'2023-04-23 11:12:13.56789'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;-- Epoch with microseconds (extract only)&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="k"&gt;extract&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;epoch&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="s1"&gt;'2023-04-23 11:12:13.56789'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;    &lt;span class="c1"&gt;-- 1682219533.56789&lt;/span&gt;

&lt;span class="c1"&gt;-- Milliseconds as decimal (13.56789 seconds)&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;date_part&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;milliseconds&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'2023-04-23 11:12:13.56789'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;-- 13567.89&lt;/span&gt;

&lt;span class="c1"&gt;-- Microseconds as integer (13.56789 seconds → 13567890 µs)&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;date_part&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;microseconds&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'2023-04-23 11:12:13.56789'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;-- 13567890&lt;/span&gt;

&lt;span class="c1"&gt;-- ISO year vs. calendar year&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;date_part&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;isoyear&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'2023-01-01 11:12:13'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;          &lt;span class="c1"&gt;-- 2022&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;date_part&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;year&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'2023-01-01 11:12:13'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;             &lt;span class="c1"&gt;-- 2023&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With these two functions, extracting any component from a date or time value becomes straightforward. They are essential for grouping, filtering, and reporting in a &lt;strong&gt;gbase database&lt;/strong&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>GBase 8a sha2: Built‑in SHA‑224, SHA‑256, SHA‑384, and SHA‑512 Hashing</title>
      <dc:creator>Michael</dc:creator>
      <pubDate>Mon, 27 Jul 2026 15:15:00 +0000</pubDate>
      <link>https://dev.to/michaelfv/gbase-8a-sha2-built-in-sha-224-sha-256-sha-384-and-sha-512-hashing-1hdc</link>
      <guid>https://dev.to/michaelfv/gbase-8a-sha2-built-in-sha-224-sha-256-sha-384-and-sha-512-hashing-1hdc</guid>
      <description>&lt;p&gt;The &lt;code&gt;sha2&lt;/code&gt; function in GBase 8a provides native support for multiple SHA‑2 hash algorithms. You can compute cryptographic hashes directly in SQL, which is useful for data integrity verification and secure storage in a &lt;strong&gt;gbase database&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Syntax
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="n"&gt;sha2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;str&lt;/code&gt;: The input string. Supports Chinese, English, digits, and all characters allowed by the &lt;code&gt;VARCHAR&lt;/code&gt; type.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;mode&lt;/code&gt;: The hash algorithm selector. Only four values are accepted:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;224&lt;/code&gt; → SHA‑224&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;256&lt;/code&gt; → SHA‑256&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;384&lt;/code&gt; → SHA‑384&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;512&lt;/code&gt; → SHA‑512&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Any other value returns &lt;code&gt;NULL&lt;/code&gt;. The input string should use UTF‑8 encoding.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;mode&lt;/th&gt;
&lt;th&gt;Algorithm&lt;/th&gt;
&lt;th&gt;Return Length&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;224&lt;/td&gt;
&lt;td&gt;SHA‑224&lt;/td&gt;
&lt;td&gt;varchar(56)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;256&lt;/td&gt;
&lt;td&gt;SHA‑256&lt;/td&gt;
&lt;td&gt;varchar(64)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;384&lt;/td&gt;
&lt;td&gt;SHA‑384&lt;/td&gt;
&lt;td&gt;varchar(96)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;512&lt;/td&gt;
&lt;td&gt;SHA‑512&lt;/td&gt;
&lt;td&gt;varchar(128)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Examples
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- SHA-224&lt;/span&gt;
&lt;span class="n"&gt;gbase&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;sha2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'GBase 8a'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;224&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;----------------------------------------------------------+&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;sha2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'GBase 8a'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;224&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                     &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;----------------------------------------------------------+&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="n"&gt;e3272023ef3e8edcbeb1daf2244529d806229d481753d45bd5bb524&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;----------------------------------------------------------+&lt;/span&gt;

&lt;span class="c1"&gt;-- SHA-256&lt;/span&gt;
&lt;span class="n"&gt;gbase&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;sha2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'GBase 8a'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;256&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;------------------------------------------------------------------+&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;sha2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'GBase 8a'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;256&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                             &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;------------------------------------------------------------------+&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="mi"&gt;37&lt;/span&gt;&lt;span class="n"&gt;e28220f6937e7dd7afcf6511e35a72d835dc50bd8c363fec8054485933313b&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;------------------------------------------------------------------+&lt;/span&gt;

&lt;span class="c1"&gt;-- SHA-384&lt;/span&gt;
&lt;span class="n"&gt;gbase&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;sha2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'GBase 8a'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;384&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;--------------------------------------------------------------------------------------------------+&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;sha2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'GBase 8a'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;384&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                                                             &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;--------------------------------------------------------------------------------------------------+&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;a1ea79415dc17396399a97d1e07c0553c775519be2f031333c9ef05d724341e4f2ed09cda8b890c595c1add5e8df2348&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;--------------------------------------------------------------------------------------------------+&lt;/span&gt;

&lt;span class="c1"&gt;-- SHA-512&lt;/span&gt;
&lt;span class="n"&gt;gbase&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;sha2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'GBase 8a'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;512&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;----------------------------------------------------------------------------------------------------------------------------------+&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;sha2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'GBase 8a'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;512&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                                                                                             &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;----------------------------------------------------------------------------------------------------------------------------------+&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="mi"&gt;66668&lt;/span&gt;&lt;span class="n"&gt;c66c50b095b772fc69cc903881a6107187cf33d4d9b43016c3b7260115e99175b677c2d603675ac7edcc0cf5ec7436c905d1b126237ab5e7949e48b62ed&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;----------------------------------------------------------------------------------------------------------------------------------+&lt;/span&gt;

&lt;span class="c1"&gt;-- Invalid mode&lt;/span&gt;
&lt;span class="n"&gt;gbase&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;sha2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'GBase 8a'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;123&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;----------------------+&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;sha2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'GBase 8a'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;123&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;----------------------+&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;                 &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;----------------------+&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;sha2&lt;/code&gt; function brings multiple SHA‑2 variants directly into your SQL toolkit. Whether you're hashing passwords or verifying row‑level integrity, you can do it inline without leaving the &lt;strong&gt;gbase database&lt;/strong&gt; engine.&lt;/p&gt;

</description>
      <category>gbase</category>
      <category>database</category>
      <category>数据库</category>
      <category>security</category>
    </item>
  </channel>
</rss>
