Merge branch '3.0' into enh/TS-5650/showLike
This commit is contained in:
commit
4edddd6038
|
@ -6,6 +6,8 @@ on:
|
||||||
- 'main'
|
- 'main'
|
||||||
- '3.0'
|
- '3.0'
|
||||||
- '3.1'
|
- '3.1'
|
||||||
|
- 'enh/cmake-TD-33848'
|
||||||
|
|
||||||
paths-ignore:
|
paths-ignore:
|
||||||
- 'docs/**'
|
- 'docs/**'
|
||||||
- 'packaging/**'
|
- 'packaging/**'
|
||||||
|
|
|
@ -0,0 +1,457 @@
|
||||||
|
name: TDengine CI Test
|
||||||
|
|
||||||
|
on:
|
||||||
|
# pull_request:
|
||||||
|
# branches:
|
||||||
|
# - 'main'
|
||||||
|
# - '3.0'
|
||||||
|
# - '3.1'
|
||||||
|
# paths-ignore:
|
||||||
|
# - 'packaging/**'
|
||||||
|
# - 'docs/**'
|
||||||
|
repository_dispatch:
|
||||||
|
types: [run-tests]
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.ref || github.event.client_payload.ref}}-${{ github.event_name == 'repository_dispatch' && 'dispatch' || ''}}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
env:
|
||||||
|
CONTAINER_NAME: 'taosd-test'
|
||||||
|
WKDIR: '/var/lib/jenkins/workspace'
|
||||||
|
WK: '/var/lib/jenkins/workspace/TDinternal'
|
||||||
|
WKC: '/var/lib/jenkins/workspace/TDinternal/community'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
fetch-parameters:
|
||||||
|
runs-on:
|
||||||
|
group: CI
|
||||||
|
labels: [self-hosted, Linux, X64, testing]
|
||||||
|
outputs:
|
||||||
|
tdinternal: ${{ steps.parameters.outputs.tdinternal }}
|
||||||
|
run_function_test: ${{ steps.parameters.outputs.run_function_test }}
|
||||||
|
run_tdgpt_test: ${{ steps.parameters.outputs.run_tdgpt_test }}
|
||||||
|
source_branch: ${{ steps.parameters.outputs.source_branch }}
|
||||||
|
target_branch: ${{ steps.parameters.outputs.target_branch }}
|
||||||
|
pr_number: ${{ steps.parameters.outputs.pr_number }}
|
||||||
|
steps:
|
||||||
|
- name: Determine trigger source and fetch parameters
|
||||||
|
id: parameters
|
||||||
|
run: |
|
||||||
|
set -euo pipefail
|
||||||
|
# check the trigger source and get branch information
|
||||||
|
if [ "${{ github.event_name }}" == "repository_dispatch" ]; then
|
||||||
|
tdinternal="true"
|
||||||
|
source_branch=${{ github.event.client_payload.tdinternal_source_branch }}
|
||||||
|
target_branch=${{ github.event.client_payload.tdinternal_target_branch }}
|
||||||
|
pr_number=${{ github.event.client_payload.tdinternal_pr_number }}
|
||||||
|
run_tdgpt_test="true"
|
||||||
|
run_function_test="true"
|
||||||
|
else
|
||||||
|
tdinternal="false"
|
||||||
|
source_branch=${{ github.event.pull_request.head.ref }}
|
||||||
|
target_branch=${{ github.event.pull_request.base.ref }}
|
||||||
|
pr_number=${{ github.event.pull_request.number }}
|
||||||
|
|
||||||
|
# check whether to run tdgpt test cases
|
||||||
|
cd ${{ env.WKC }}
|
||||||
|
changed_files_non_doc=$(git --no-pager diff --name-only FETCH_HEAD `git merge-base FETCH_HEAD $target_branch`|grep -v "^docs/en/"|grep -v "^docs/zh/"|grep -v ".md$" | tr '\n' ' ' || :)
|
||||||
|
|
||||||
|
if [[ "$changed_files_non_doc" != '' && "$changed_files_non_doc" =~ /forecastoperator.c|anomalywindowoperator.c|tanalytics.h|tanalytics.c|tdgpt_cases.task|analytics/ ]]; then
|
||||||
|
run_tdgpt_test="true"
|
||||||
|
else
|
||||||
|
run_tdgpt_test="false"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# check whether to run function test cases
|
||||||
|
changed_files_non_tdgpt=$(git --no-pager diff --name-only FETCH_HEAD `git merge-base FETCH_HEAD $target_branch`|grep -v "^docs/en/"|grep -v "^docs/zh/"|grep -v ".md$" | grep -Ev "forecastoperator.c|anomalywindowoperator.c|tanalytics.h|tanalytics.c|tdgpt_cases.task|analytics" | tr '\n' ' ' ||:)
|
||||||
|
if [ "$changed_files_non_tdgpt" != '' ]; then
|
||||||
|
run_function_test="true"
|
||||||
|
else
|
||||||
|
run_function_test="false"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "tdinternal=$tdinternal" >> $GITHUB_OUTPUT
|
||||||
|
echo "run_function_test=$run_function_test" >> $GITHUB_OUTPUT
|
||||||
|
echo "run_tdgpt_test=$run_tdgpt_test" >> $GITHUB_OUTPUT
|
||||||
|
echo "source_branch=$source_branch" >> $GITHUB_OUTPUT
|
||||||
|
echo "target_branch=$target_branch" >> $GITHUB_OUTPUT
|
||||||
|
echo "pr_number=$pr_number" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
run-tests-on-linux:
|
||||||
|
needs: fetch-parameters
|
||||||
|
runs-on:
|
||||||
|
group: CI
|
||||||
|
labels: [self-hosted, Linux, X64, testing]
|
||||||
|
timeout-minutes: 200
|
||||||
|
env:
|
||||||
|
IS_TDINTERNAL: ${{ needs.fetch-parameters.outputs.tdinternal }}
|
||||||
|
RUN_RUNCTION_TEST: ${{ needs.fetch-parameters.outputs.run_function_test }}
|
||||||
|
RUN_TDGPT_TEST: ${{ needs.fetch-parameters.outputs.run_tdgpt_test }}
|
||||||
|
SOURCE_BRANCH: ${{ needs.fetch-parameters.outputs.source_branch }}
|
||||||
|
TARGET_BRANCH: ${{ needs.fetch-parameters.outputs.target_branch }}
|
||||||
|
PR_NUMBER: ${{ needs.fetch-parameters.outputs.pr_number }}
|
||||||
|
steps:
|
||||||
|
- name: Output the environment information
|
||||||
|
run: |
|
||||||
|
echo "::group::Environment Info"
|
||||||
|
date
|
||||||
|
hostname
|
||||||
|
env
|
||||||
|
echo "Runner: ${{ runner.name }}"
|
||||||
|
echo "Trigger Source from TDinternal: ${{ env.IS_TDINTERNAL }}"
|
||||||
|
echo "Workspace: ${{ env.WKDIR }}"
|
||||||
|
git --version
|
||||||
|
echo "${{ env.WKDIR }}/restore.sh -p ${{ env.PR_NUMBER }} -n ${{ github.run_number }} -c ${{ env.CONTAINER_NAME }}"
|
||||||
|
echo "::endgroup::"
|
||||||
|
|
||||||
|
- name: Prepare repositories
|
||||||
|
run: |
|
||||||
|
set -euo pipefail
|
||||||
|
prepare_environment() {
|
||||||
|
cd "$1"
|
||||||
|
git reset --hard
|
||||||
|
git clean -f
|
||||||
|
git remote prune origin
|
||||||
|
git fetch
|
||||||
|
git checkout "$2"
|
||||||
|
}
|
||||||
|
prepare_environment "${{ env.WK }}" "${{ env.TARGET_BRANCH }}"
|
||||||
|
prepare_environment "${{ env.WKC }}" "${{ env.TARGET_BRANCH }}"
|
||||||
|
|
||||||
|
- name: Get latest codes and logs for TDinternal PR
|
||||||
|
if: ${{ env.IS_TDINTERNAL == 'true' }}
|
||||||
|
run: |
|
||||||
|
cd ${{ env.WK }}
|
||||||
|
git pull >/dev/null
|
||||||
|
git log -5
|
||||||
|
echo "`date "+%Y%m%d-%H%M%S"` TDinternalTest/${{ env.PR_NUMBER }}:${{ github.run_number }}:${{ env.TARGET_BRANCH }}" >>${{ env.WKDIR }}/jenkins.log
|
||||||
|
echo "CHANGE_BRANCH:${{ env.SOURCE_BRANCH }}" >>${{ env.WKDIR }}/jenkins.log
|
||||||
|
echo "TDinternal log: `git log -5`" >>${{ env.WKDIR }}/jenkins.log
|
||||||
|
git fetch origin +refs/pull/${{ env.PR_NUMBER }}/merge
|
||||||
|
git checkout -qf FETCH_HEAD
|
||||||
|
git log -5
|
||||||
|
echo "TDinternal log merged: `git log -5`" >>${{ env.WKDIR }}/jenkins.log
|
||||||
|
cd ${{ env.WKC }}
|
||||||
|
git remote prune origin
|
||||||
|
git pull >/dev/null
|
||||||
|
git log -5
|
||||||
|
echo "community log: `git log -5`" >>${{ env.WKDIR }}/jenkins.log
|
||||||
|
- name: Get latest codes and logs for TDengine PR
|
||||||
|
if: ${{ env.IS_TDINTERNAL == 'false' }}
|
||||||
|
run: |
|
||||||
|
cd ${{ env.WKC }}
|
||||||
|
git remote prune origin
|
||||||
|
git pull >/dev/null
|
||||||
|
git log -5
|
||||||
|
echo "`date "+%Y%m%d-%H%M%S"` TDengineTest/${{ env.PR_NUMBER }}:${{ github.run_number }}:${{ env.TARGET_BRANCH }}" >>${{ env.WKDIR }}/jenkins.log
|
||||||
|
echo "CHANGE_BRANCH:${{ env.SOURCE_BRANCH }}" >>${{ env.WKDIR }}/jenkins.log
|
||||||
|
echo "community log: `git log -5`" >>${{ env.WKDIR }}/jenkins.log
|
||||||
|
git fetch origin +refs/pull/${{ env.PR_NUMBER }}/merge
|
||||||
|
git checkout -qf FETCH_HEAD
|
||||||
|
git log -5
|
||||||
|
echo "community log merged: `git log -5`" >>${{ env.WKDIR }}/jenkins.log
|
||||||
|
cd ${{ env.WK }}
|
||||||
|
git pull >/dev/null
|
||||||
|
git log -5
|
||||||
|
echo "TDinternal log: `git log -5`" >>${{ env.WKDIR }}/jenkins.log
|
||||||
|
- name: Update submodule
|
||||||
|
run: |
|
||||||
|
cd ${{ env.WKC }}
|
||||||
|
git submodule update --init --recursive
|
||||||
|
- name: Output the 'file_no_doc_changed' information to the file
|
||||||
|
if: ${{ env.IS_TDINTERNAL == 'false' && env.TARGET_BRANCH != '3.1' }}
|
||||||
|
run: |
|
||||||
|
mkdir -p ${{ env.WKDIR }}/tmp/${{ env.PR_NUMBER }}_${{ github.run_number }}
|
||||||
|
changed_files_non_doc=$(git --no-pager diff --name-only FETCH_HEAD `git merge-base FETCH_HEAD ${{ env.TARGET_BRANCH }}`|grep -v "^docs/en/"|grep -v "^docs/zh/"|grep -v ".md$" | tr '\n' ' ' || :)
|
||||||
|
echo $changed_files_non_doc > ${{ env.WKDIR }}/tmp/${{ env.PR_NUMBER }}_${{ github.run_number }}/docs_changed.txt
|
||||||
|
- name: Check assert testing
|
||||||
|
if: ${{ env.IS_TDINTERNAL == 'false' && env.TARGET_BRANCH != '3.1' }}
|
||||||
|
run: |
|
||||||
|
cd ${{ env.WKC }}/tests/parallel_test
|
||||||
|
./run_check_assert_container.sh -d ${{ env.WKDIR }}
|
||||||
|
- name: Check void function testing
|
||||||
|
if: ${{ env.IS_TDINTERNAL == 'false' && env.TARGET_BRANCH != '3.1' }}
|
||||||
|
run: |
|
||||||
|
cd ${{ env.WKC }}/tests/parallel_test
|
||||||
|
./run_check_void_container.sh -d ${{ env.WKDIR }}
|
||||||
|
- name: Build docker container
|
||||||
|
if: ${{ env.RUN_RUNCTION_TEST == 'true' }}
|
||||||
|
run: |
|
||||||
|
date
|
||||||
|
rm -rf ${{ env.WKC }}/debug
|
||||||
|
cd ${{ env.WKC }}/tests/parallel_test
|
||||||
|
time ./container_build.sh -w ${{ env.WKDIR }} -e
|
||||||
|
- name: Get parameters for testing
|
||||||
|
id: get_param
|
||||||
|
run: |
|
||||||
|
log_server_file="/home/log_server.json"
|
||||||
|
timeout_cmd=""
|
||||||
|
extra_param=""
|
||||||
|
|
||||||
|
if [ -f "$log_server_file" ]; then
|
||||||
|
log_server_enabled=$(jq '.enabled' "$log_server_file")
|
||||||
|
timeout_param=$(jq '.timeout' "$log_server_file")
|
||||||
|
if [ "$timeout_param" != "null" ] && [ "$timeout_param" != "0" ]; then
|
||||||
|
timeout_cmd="timeout $timeout_param"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$log_server_enabled" == "1" ]; then
|
||||||
|
log_server=$(jq '.server' "$log_server_file" | sed 's/\\\"//g')
|
||||||
|
if [ "$log_server" != "null" ] && [ "$log_server" != "" ]; then
|
||||||
|
extra_param="-w $log_server"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
echo "timeout_cmd=$timeout_cmd" >> $GITHUB_OUTPUT
|
||||||
|
echo "extra_param=$extra_param" >> $GITHUB_OUTPUT
|
||||||
|
- name: Run function returns with a null pointer scan testing
|
||||||
|
if: ${{ env.IS_TDINTERNAL == 'false' && env.TARGET_BRANCH != '3.1' }}
|
||||||
|
run: |
|
||||||
|
cd ${{ env.WKC }}/tests/parallel_test
|
||||||
|
./run_scan_container.sh -d ${{ env.WKDIR }} -b ${{ env.PR_NUMBER }}_${{ github.run_number }} -f ${{ env.WKDIR }}/tmp/${{ env.PR_NUMBER }}_${{ github.run_number }}/docs_changed.txt ${{ steps.get_param.outputs.extra_param }}
|
||||||
|
- name: Run tdgpt test cases
|
||||||
|
if: ${{ env.IS_TDINTERNAL == 'false' && env.TARGET_BRANCH != '3.1' && env.RUN_TDGPT_TEST == 'true' }}
|
||||||
|
run: |
|
||||||
|
cd ${{ env.WKC }}/tests/parallel_test
|
||||||
|
export DEFAULT_RETRY_TIME=2
|
||||||
|
date
|
||||||
|
timeout 600 time ./run.sh -e -m /home/m.json -t tdgpt_cases.task -b ${{ env.PR_NUMBER }}_${{ github.run_number }} -l ${{ env.WKDIR }}/log -o 300 ${{ steps.get_param.outputs.extra_param }}
|
||||||
|
- name: Run function test cases
|
||||||
|
if: ${{ env.RUN_RUNCTION_TEST == 'true'}}
|
||||||
|
run: |
|
||||||
|
cd ${{ env.WKC }}/tests/parallel_test
|
||||||
|
export DEFAULT_RETRY_TIME=2
|
||||||
|
date
|
||||||
|
${{ steps.get_param.outputs.timeout_cmd }} time ./run.sh -e -m /home/m.json -t cases.task -b ${{ env.PR_NUMBER }}_${{ github.run_number }} -l ${{ env.WKDIR }}/log -o 1200 ${{ steps.get_param.outputs.extra_param }}
|
||||||
|
|
||||||
|
run-tests-on-mac:
|
||||||
|
needs: fetch-parameters
|
||||||
|
if: ${{ needs.fetch-parameters.outputs.run_function_test == 'true' }}
|
||||||
|
runs-on:
|
||||||
|
group: CI
|
||||||
|
labels: [self-hosted, macOS, ARM64, testing]
|
||||||
|
timeout-minutes: 60
|
||||||
|
env:
|
||||||
|
IS_TDINTERNAL: ${{ needs.fetch-parameters.outputs.tdinternal }}
|
||||||
|
SOURCE_BRANCH: ${{ needs.fetch-parameters.outputs.source_branch }}
|
||||||
|
TARGET_BRANCH: ${{ needs.fetch-parameters.outputs.target_branch }}
|
||||||
|
PR_NUMBER: ${{ needs.fetch-parameters.outputs.pr_number }}
|
||||||
|
steps:
|
||||||
|
- name: Output the environment information
|
||||||
|
run: |
|
||||||
|
echo "::group::Environment Info"
|
||||||
|
date
|
||||||
|
hostname
|
||||||
|
env
|
||||||
|
echo "Runner: ${{ runner.name }}"
|
||||||
|
echo "Trigger Source from TDinternal: ${{ env.IS_TDINTERNAL }}"
|
||||||
|
echo "Workspace: ${{ env.WKDIR }}"
|
||||||
|
git --version
|
||||||
|
echo "${{ env.WKDIR }}/restore.sh -p ${{ env.PR_NUMBER }} -n ${{ github.run_number }} -c ${{ env.CONTAINER_NAME }}"
|
||||||
|
echo "::endgroup::"
|
||||||
|
- name: Prepare repositories
|
||||||
|
run: |
|
||||||
|
set -euo pipefail
|
||||||
|
prepare_environment() {
|
||||||
|
cd "$1"
|
||||||
|
git reset --hard
|
||||||
|
git clean -f
|
||||||
|
git remote prune origin
|
||||||
|
git fetch
|
||||||
|
git checkout "$2"
|
||||||
|
}
|
||||||
|
prepare_environment "${{ env.WK }}" "${{ env.TARGET_BRANCH }}"
|
||||||
|
prepare_environment "${{ env.WKC }}" "${{ env.TARGET_BRANCH }}"
|
||||||
|
- name: Get latest codes and logs for TDinternal PR
|
||||||
|
if: ${{ env.IS_TDINTERNAL == 'true' }}
|
||||||
|
run: |
|
||||||
|
cd ${{ env.WK }}
|
||||||
|
git pull >/dev/null
|
||||||
|
git log -5
|
||||||
|
echo "`date "+%Y%m%d-%H%M%S"` TDinternalTest/${{ env.PR_NUMBER }}:${{ github.run_number }}:${{ env.TARGET_BRANCH }}" >>${{ env.WKDIR }}/jenkins.log
|
||||||
|
echo "CHANGE_BRANCH:${{ env.SOURCE_BRANCH }}" >>${{ env.WKDIR }}/jenkins.log
|
||||||
|
echo "TDinternal log: `git log -5`" >>${{ env.WKDIR }}/jenkins.log
|
||||||
|
git fetch origin +refs/pull/${{ env.PR_NUMBER }}/merge
|
||||||
|
git checkout -qf FETCH_HEAD
|
||||||
|
git log -5
|
||||||
|
echo "TDinternal log merged: `git log -5`" >>${{ env.WKDIR }}/jenkins.log
|
||||||
|
cd ${{ env.WKC }}
|
||||||
|
git remote prune origin
|
||||||
|
git pull >/dev/null
|
||||||
|
git log -5
|
||||||
|
echo "community log: `git log -5`" >>${{ env.WKDIR }}/jenkins.log
|
||||||
|
- name: Get latest codes and logs for TDengine PR
|
||||||
|
if: ${{ env.IS_TDINTERNAL == 'false' }}
|
||||||
|
run: |
|
||||||
|
cd ${{ env.WKC }}
|
||||||
|
git remote prune origin
|
||||||
|
git pull >/dev/null
|
||||||
|
git log -5
|
||||||
|
echo "`date "+%Y%m%d-%H%M%S"` TDengineTest/${{ env.PR_NUMBER }}:${{ github.run_number }}:${{ env.TARGET_BRANCH }}" >>${{ env.WKDIR }}/jenkins.log
|
||||||
|
echo "CHANGE_BRANCH:${{ env.SOURCE_BRANCH }}" >>${{ env.WKDIR }}/jenkins.log
|
||||||
|
echo "community log: `git log -5`" >>${{ env.WKDIR }}/jenkins.log
|
||||||
|
git fetch origin +refs/pull/${{ env.PR_NUMBER }}/merge
|
||||||
|
git checkout -qf FETCH_HEAD
|
||||||
|
git log -5
|
||||||
|
echo "community log merged: `git log -5`" >>${{ env.WKDIR }}/jenkins.log
|
||||||
|
cd ${{ env.WK }}
|
||||||
|
git pull >/dev/null
|
||||||
|
git log -5
|
||||||
|
echo "TDinternal log: `git log -5`" >>${{ env.WKDIR }}/jenkins.log
|
||||||
|
- name: Update submodule
|
||||||
|
run: |
|
||||||
|
cd ${{ env.WKC }}
|
||||||
|
git submodule update --init --recursive
|
||||||
|
- name: Run tests
|
||||||
|
run: |
|
||||||
|
date
|
||||||
|
cd ${{ env.WK }}
|
||||||
|
rm -rf debug
|
||||||
|
mkdir debug
|
||||||
|
cd ${{ env.WK }}/debug
|
||||||
|
echo $PATH
|
||||||
|
echo "PATH=/opt/homebrew/bin:$PATH" >> $GITHUB_ENV
|
||||||
|
cmake .. -DBUILD_TEST=true -DBUILD_HTTPS=false -DCMAKE_BUILD_TYPE=Release
|
||||||
|
make -j10
|
||||||
|
ctest -j10 || exit 7
|
||||||
|
date
|
||||||
|
|
||||||
|
run-tests-on-windows:
|
||||||
|
needs: fetch-parameters
|
||||||
|
if: ${{ needs.fetch-parameters.outputs.run_function_test == 'true' }}
|
||||||
|
runs-on:
|
||||||
|
group: CI
|
||||||
|
labels: [self-hosted, Windows, X64, testing]
|
||||||
|
timeout-minutes: 126
|
||||||
|
env:
|
||||||
|
IS_TDINTERNAL: ${{ needs.fetch-parameters.outputs.tdinternal }}
|
||||||
|
SOURCE_BRANCH: ${{ needs.fetch-parameters.outputs.source_branch }}
|
||||||
|
TARGET_BRANCH: ${{ needs.fetch-parameters.outputs.target_branch }}
|
||||||
|
PR_NUMBER: ${{ needs.fetch-parameters.outputs.pr_number }}
|
||||||
|
WIN_INTERNAL_ROOT: "C:\\workspace\\0\\TDinternal"
|
||||||
|
WIN_COMMUNITY_ROOT: "C:\\workspace\\0\\TDinternal\\community"
|
||||||
|
WIN_SYSTEM_TEST_ROOT: "C:\\workspace\\0\\TDinternal\\community\\tests\\system-test"
|
||||||
|
WIN_VS_PATH: "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\VC\\Auxiliary\\Build\\vcvarsall.bat"
|
||||||
|
WIN_CPU_TYPE: "x64"
|
||||||
|
steps:
|
||||||
|
- name: Output the environment information
|
||||||
|
run: |
|
||||||
|
hostname
|
||||||
|
taskkill /f /t /im python.exe
|
||||||
|
taskkill /f /t /im bash.exe
|
||||||
|
taskkill /f /t /im taosd.exe
|
||||||
|
ipconfig
|
||||||
|
set
|
||||||
|
date /t
|
||||||
|
time /t
|
||||||
|
rd /s /Q "%WIN_INTERNAL_ROOT%\debug" || exit 0
|
||||||
|
shell: cmd
|
||||||
|
- name: Prepare repositories
|
||||||
|
run: |
|
||||||
|
:: Prepare internal repository
|
||||||
|
if exist "%WIN_INTERNAL_ROOT%" (
|
||||||
|
cd /d "%WIN_INTERNAL_ROOT%"
|
||||||
|
git reset --hard
|
||||||
|
git clean -f
|
||||||
|
git remote prune origin
|
||||||
|
git fetch
|
||||||
|
git checkout "%TARGET_BRANCH%"
|
||||||
|
) else (
|
||||||
|
echo Directory does not exist: "%WIN_INTERNAL_ROOT%"
|
||||||
|
exit 1
|
||||||
|
)
|
||||||
|
|
||||||
|
:: Prepare community repository
|
||||||
|
if exist "%WIN_COMMUNITY_ROOT%" (
|
||||||
|
cd /d "%WIN_COMMUNITY_ROOT%"
|
||||||
|
git reset --hard
|
||||||
|
git clean -f
|
||||||
|
git remote prune origin
|
||||||
|
git fetch
|
||||||
|
git checkout "%TARGET_BRANCH%"
|
||||||
|
) else (
|
||||||
|
echo Directory does not exist: "%WIN_COMMUNITY_ROOT%"
|
||||||
|
exit 1
|
||||||
|
)
|
||||||
|
shell: cmd
|
||||||
|
- name: Get latest codes and logs for TDinternal PR
|
||||||
|
if: ${{ env.IS_TDINTERNAL == 'true' }}
|
||||||
|
run: |
|
||||||
|
cd %WIN_INTERNAL_ROOT%
|
||||||
|
git pull origin %TARGET_BRANCH%
|
||||||
|
git fetch origin +refs/pull/%PR_NUMBER%/merge
|
||||||
|
git checkout -qf FETCH_HEAD
|
||||||
|
cd %WIN_COMMUNITY_ROOT%
|
||||||
|
git remote prune origin
|
||||||
|
git pull
|
||||||
|
shell: cmd
|
||||||
|
- name: Get latest codes and logs for TDengine PR
|
||||||
|
if: ${{ env.IS_TDINTERNAL == 'false' }}
|
||||||
|
run: |
|
||||||
|
cd %WIN_INTERNAL_ROOT%
|
||||||
|
git pull origin %TARGET_BRANCH%
|
||||||
|
cd %WIN_COMMUNITY_ROOT%
|
||||||
|
git remote prune origin
|
||||||
|
git pull origin %TARGET_BRANCH%
|
||||||
|
git fetch origin +refs/pull/%PR_NUMBER%/merge
|
||||||
|
git checkout -qf FETCH_HEAD
|
||||||
|
shell: cmd
|
||||||
|
- name: Output branch and log information
|
||||||
|
run: |
|
||||||
|
cd %WIN_INTERNAL_ROOT%
|
||||||
|
git branch
|
||||||
|
git log -5
|
||||||
|
|
||||||
|
cd %WIN_COMMUNITY_ROOT%
|
||||||
|
git branch
|
||||||
|
git log -5
|
||||||
|
shell: cmd
|
||||||
|
- name: Update submodule
|
||||||
|
run: |
|
||||||
|
cd %WIN_COMMUNITY_ROOT%
|
||||||
|
git submodule update --init --recursive
|
||||||
|
shell: cmd
|
||||||
|
- name: Build on windows
|
||||||
|
run: |
|
||||||
|
echo "building ..."
|
||||||
|
time /t
|
||||||
|
cd %WIN_INTERNAL_ROOT%
|
||||||
|
mkdir debug
|
||||||
|
cd debug
|
||||||
|
time /t
|
||||||
|
call "%WIN_VS_PATH%" %WIN_CPU_TYPE%
|
||||||
|
set CL=/MP8
|
||||||
|
echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> cmake"
|
||||||
|
time /t
|
||||||
|
cmake .. -G "NMake Makefiles JOM" -DBUILD_TEST=true -DBUILD_TOOLS=true || exit 7
|
||||||
|
echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> jom -j 6"
|
||||||
|
time /t
|
||||||
|
jom -j 6 || exit 8
|
||||||
|
time /t
|
||||||
|
|
||||||
|
cd %WIN_COMMUNITY_ROOT%/tests/ci
|
||||||
|
pip3 install taospy==2.7.21
|
||||||
|
pip3 install taos-ws-py==0.3.8
|
||||||
|
xcopy /e/y/i/f %WIN_INTERNAL_ROOT%\\debug\\build\\lib\\taos.dll C:\\Windows\\System32
|
||||||
|
shell: cmd
|
||||||
|
- name: Run ctest
|
||||||
|
run: |
|
||||||
|
echo "windows ctest ..."
|
||||||
|
time /t
|
||||||
|
cd %WIN_INTERNAL_ROOT%\\debug
|
||||||
|
ctest -j 1 || exit 7
|
||||||
|
time /t
|
||||||
|
shell: cmd
|
||||||
|
- name: Run function test
|
||||||
|
run: |
|
||||||
|
echo "windows test ..."
|
||||||
|
xcopy /e/y/i/f "%WIN_INTERNAL_ROOT%\debug\build\lib\taos.dll" C:\Windows\System32
|
||||||
|
ls -l "C:\Windows\System32\taos.dll"
|
||||||
|
time /t
|
||||||
|
cd %WIN_SYSTEM_TEST_ROOT%
|
||||||
|
echo "testing ..."
|
||||||
|
test-all.bat ci
|
||||||
|
time /t
|
||||||
|
shell: cmd
|
|
@ -0,0 +1,48 @@
|
||||||
|
name: TDengine Doc Build
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- 'main'
|
||||||
|
- '3.0'
|
||||||
|
paths:
|
||||||
|
- 'docs/**'
|
||||||
|
- '*.md'
|
||||||
|
|
||||||
|
env:
|
||||||
|
DOC_WKC: "/root/doc_ci_work"
|
||||||
|
ZH_DOC_REPO: "docs.taosdata.com"
|
||||||
|
EN_DOC_REPO: "docs.tdengine.com"
|
||||||
|
TD_REPO: "TDengine"
|
||||||
|
TOOLS_REPO: "taos-tools"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-doc:
|
||||||
|
runs-on:
|
||||||
|
group: CI
|
||||||
|
labels: [self-hosted, doc-build]
|
||||||
|
steps:
|
||||||
|
- name: Get the latest document contents
|
||||||
|
run: |
|
||||||
|
set -e
|
||||||
|
cd ${{ env.DOC_WKC }}/${{ env.TD_REPO }}
|
||||||
|
git reset --hard
|
||||||
|
git clean -f
|
||||||
|
git remote prune origin
|
||||||
|
git fetch
|
||||||
|
git checkout ${{ github.event.pull_request.base.ref }}
|
||||||
|
git pull >/dev/null
|
||||||
|
git fetch origin +refs/pull/${{ github.event.pull_request.number }}/merge
|
||||||
|
git checkout -qf FETCH_HEAD
|
||||||
|
|
||||||
|
- name: Build the chinese document
|
||||||
|
run: |
|
||||||
|
cd ${{ env.DOC_WKC }}/${{ env.ZH_DOC_REPO }}
|
||||||
|
yarn ass local
|
||||||
|
yarn build
|
||||||
|
|
||||||
|
- name: Build the english document
|
||||||
|
run: |
|
||||||
|
cd ${{ env.DOC_WKC }}/${{ env.EN_DOC_REPO }}
|
||||||
|
yarn ass local
|
||||||
|
yarn build
|
|
@ -11,36 +11,29 @@ if(NOT DEFINED TD_SOURCE_DIR)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
SET(TD_COMMUNITY_DIR ${PROJECT_SOURCE_DIR})
|
SET(TD_COMMUNITY_DIR ${PROJECT_SOURCE_DIR})
|
||||||
|
|
||||||
set(TD_SUPPORT_DIR "${TD_SOURCE_DIR}/cmake")
|
set(TD_SUPPORT_DIR "${TD_SOURCE_DIR}/cmake")
|
||||||
set(TD_CONTRIB_DIR "${TD_SOURCE_DIR}/contrib")
|
set(TD_CONTRIB_DIR "${TD_SOURCE_DIR}/contrib")
|
||||||
|
|
||||||
include(${TD_SUPPORT_DIR}/cmake.platform)
|
include(${TD_SUPPORT_DIR}/cmake.platform)
|
||||||
include(${TD_SUPPORT_DIR}/cmake.define)
|
|
||||||
include(${TD_SUPPORT_DIR}/cmake.options)
|
include(${TD_SUPPORT_DIR}/cmake.options)
|
||||||
|
include(${TD_SUPPORT_DIR}/cmake.define)
|
||||||
include(${TD_SUPPORT_DIR}/cmake.version)
|
include(${TD_SUPPORT_DIR}/cmake.version)
|
||||||
|
include(${TD_SUPPORT_DIR}/cmake.install)
|
||||||
# contrib
|
|
||||||
add_subdirectory(contrib)
|
|
||||||
|
|
||||||
set_property(GLOBAL PROPERTY GLOBAL_DEPENDS_NO_CYCLES OFF)
|
set_property(GLOBAL PROPERTY GLOBAL_DEPENDS_NO_CYCLES OFF)
|
||||||
|
|
||||||
# api
|
|
||||||
add_library(api INTERFACE)
|
add_library(api INTERFACE)
|
||||||
target_include_directories(api INTERFACE "include/client")
|
target_include_directories(api INTERFACE "include/client")
|
||||||
|
|
||||||
# src
|
add_subdirectory(contrib)
|
||||||
if(${BUILD_TEST})
|
|
||||||
include(CTest)
|
|
||||||
enable_testing()
|
|
||||||
endif(${BUILD_TEST})
|
|
||||||
|
|
||||||
add_subdirectory(source)
|
add_subdirectory(source)
|
||||||
add_subdirectory(tools)
|
add_subdirectory(tools)
|
||||||
add_subdirectory(utils)
|
add_subdirectory(utils)
|
||||||
add_subdirectory(examples/c)
|
|
||||||
add_subdirectory(tests)
|
add_subdirectory(tests)
|
||||||
include(${TD_SUPPORT_DIR}/cmake.install)
|
|
||||||
|
|
||||||
# docs
|
|
||||||
add_subdirectory(docs/doxgen)
|
add_subdirectory(docs/doxgen)
|
||||||
|
|
||||||
|
if(${BUILD_TEST})
|
||||||
|
include(CTest)
|
||||||
|
enable_testing()
|
||||||
|
add_subdirectory(examples/c)
|
||||||
|
endif(${BUILD_TEST})
|
|
@ -162,10 +162,10 @@ make
|
||||||
可以使用Jemalloc作为内存分配器,而不是使用glibc:
|
可以使用Jemalloc作为内存分配器,而不是使用glibc:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cmake .. -DJEMALLOC_ENABLED=true
|
cmake .. -DJEMALLOC_ENABLED=ON
|
||||||
```
|
```
|
||||||
TDengine构建脚本可以自动检测x86、x86-64、arm64平台上主机的体系结构。
|
TDengine构建脚本可以自动检测 x86、x86-64、arm64 平台上主机的体系结构。
|
||||||
您也可以通过CPUTYPE选项手动指定架构:
|
您也可以通过 CPUTYPE 选项手动指定架构:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cmake .. -DCPUTYPE=aarch64 && cmake --build .
|
cmake .. -DCPUTYPE=aarch64 && cmake --build .
|
||||||
|
|
|
@ -177,7 +177,7 @@ If you want to compile taosKeeper, you need to add the `--DBUILD_KEEPER=true` op
|
||||||
You can use Jemalloc as memory allocator instead of glibc:
|
You can use Jemalloc as memory allocator instead of glibc:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cmake .. -DJEMALLOC_ENABLED=true
|
cmake .. -DJEMALLOC_ENABLED=ON
|
||||||
```
|
```
|
||||||
|
|
||||||
TDengine build script can auto-detect the host machine's architecture on x86, x86-64, arm64 platform.
|
TDengine build script can auto-detect the host machine's architecture on x86, x86-64, arm64 platform.
|
||||||
|
|
|
@ -116,7 +116,6 @@ ELSE()
|
||||||
set(VAR_TSZ "TSZ" CACHE INTERNAL "global variant tsz")
|
set(VAR_TSZ "TSZ" CACHE INTERNAL "global variant tsz")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
# force set all platform to JEMALLOC_ENABLED = false
|
|
||||||
# SET(JEMALLOC_ENABLED OFF)
|
# SET(JEMALLOC_ENABLED OFF)
|
||||||
|
|
||||||
IF(TD_WINDOWS)
|
IF(TD_WINDOWS)
|
||||||
|
@ -262,10 +261,10 @@ ENDIF()
|
||||||
|
|
||||||
IF(TD_LINUX)
|
IF(TD_LINUX)
|
||||||
IF(${JEMALLOC_ENABLED})
|
IF(${JEMALLOC_ENABLED})
|
||||||
MESSAGE(STATUS "JEMALLOC_ENABLED Enabled")
|
MESSAGE(STATUS "JEMALLOC Enabled")
|
||||||
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-error=attributes")
|
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-error=attributes")
|
||||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-error=attributes")
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-error=attributes")
|
||||||
ELSE()
|
ELSE()
|
||||||
MESSAGE(STATUS "JEMALLOC_ENABLED Disabled")
|
MESSAGE(STATUS "JEMALLOC Disabled")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
ENDIF()
|
ENDIF()
|
|
@ -2,7 +2,7 @@
|
||||||
IF (DEFINED VERNUMBER)
|
IF (DEFINED VERNUMBER)
|
||||||
SET(TD_VER_NUMBER ${VERNUMBER})
|
SET(TD_VER_NUMBER ${VERNUMBER})
|
||||||
ELSE ()
|
ELSE ()
|
||||||
SET(TD_VER_NUMBER "3.3.5.2.alpha")
|
SET(TD_VER_NUMBER "3.3.5.8.alpha")
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
IF (DEFINED VERCOMPATIBLE)
|
IF (DEFINED VERCOMPATIBLE)
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
# taosws-rs
|
# taosws-rs
|
||||||
ExternalProject_Add(taosws-rs
|
ExternalProject_Add(taosws-rs
|
||||||
GIT_REPOSITORY https://github.com/taosdata/taos-connector-rust.git
|
GIT_REPOSITORY https://github.com/taosdata/taos-connector-rust.git
|
||||||
GIT_TAG 3.0
|
GIT_TAG main
|
||||||
SOURCE_DIR "${TD_SOURCE_DIR}/tools/taosws-rs"
|
SOURCE_DIR "${TD_SOURCE_DIR}/tools/taosws-rs"
|
||||||
BINARY_DIR ""
|
BINARY_DIR ""
|
||||||
#BUILD_IN_SOURCE TRUE
|
#BUILD_IN_SOURCE TRUE
|
||||||
|
|
|
@ -20,9 +20,9 @@ if(${BUILD_WITH_SQLITE})
|
||||||
add_subdirectory(sqlite)
|
add_subdirectory(sqlite)
|
||||||
endif(${BUILD_WITH_SQLITE})
|
endif(${BUILD_WITH_SQLITE})
|
||||||
|
|
||||||
if(${BUILD_S3})
|
# if(${BUILD_S3})
|
||||||
add_subdirectory(azure)
|
# add_subdirectory(azure)
|
||||||
endif()
|
# endif()
|
||||||
|
|
||||||
add_subdirectory(tdev)
|
add_subdirectory(tdev)
|
||||||
add_subdirectory(lz4)
|
add_subdirectory(lz4)
|
||||||
|
|
|
@ -16,8 +16,8 @@ TDengine is designed for various writing scenarios, and many of these scenarios
|
||||||
### Syntax
|
### Syntax
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
COMPACT DATABASE db_name [start with 'XXXX'] [end with 'YYYY'];
|
COMPACT DATABASE db_name [start with 'XXXX'] [end with 'YYYY'] [META_ONLY];
|
||||||
COMPACT [db_name.]VGROUPS IN (vgroup_id1, vgroup_id2, ...) [start with 'XXXX'] [end with 'YYYY'];
|
COMPACT [db_name.]VGROUPS IN (vgroup_id1, vgroup_id2, ...) [start with 'XXXX'] [end with 'YYYY'] [META_ONLY];
|
||||||
SHOW COMPACTS;
|
SHOW COMPACTS;
|
||||||
SHOW COMPACT compact_id;
|
SHOW COMPACT compact_id;
|
||||||
KILL COMPACT compact_id;
|
KILL COMPACT compact_id;
|
||||||
|
@ -30,6 +30,7 @@ KILL COMPACT compact_id;
|
||||||
- COMPACT will merge multiple STT files
|
- COMPACT will merge multiple STT files
|
||||||
- You can specify the start time of the COMPACT data with the start with keyword
|
- You can specify the start time of the COMPACT data with the start with keyword
|
||||||
- You can specify the end time of the COMPACT data with the end with keyword
|
- You can specify the end time of the COMPACT data with the end with keyword
|
||||||
|
- You can specify the META_ONLY keyword to only compact the meta data which are not compacted by default
|
||||||
- The COMPACT command will return the ID of the COMPACT task
|
- The COMPACT command will return the ID of the COMPACT task
|
||||||
- COMPACT tasks are executed asynchronously in the background, and you can view the progress of COMPACT tasks using the SHOW COMPACTS command
|
- COMPACT tasks are executed asynchronously in the background, and you can view the progress of COMPACT tasks using the SHOW COMPACTS command
|
||||||
- The SHOW command will return the ID of the COMPACT task, and you can terminate the COMPACT task using the KILL COMPACT command
|
- The SHOW command will return the ID of the COMPACT task, and you can terminate the COMPACT task using the KILL COMPACT command
|
||||||
|
|
|
@ -18,7 +18,10 @@ create user user_name pass'password' [sysinfo {1|0}] [createdb {1|0}]
|
||||||
The parameters are explained as follows.
|
The parameters are explained as follows.
|
||||||
|
|
||||||
- user_name: Up to 23 B long.
|
- user_name: Up to 23 B long.
|
||||||
- password: The password must be between 8 and 16 characters long and include at least three types of characters from the following: uppercase letters, lowercase letters, numbers, and special characters. Special characters include `! @ # $ % ^ & * ( ) - _ + = [ ] { } : ; > < ? | ~ , .`.
|
- password: The password must be between 8 and 255 characters long. The password include at least three types of characters from the following: uppercase letters, lowercase letters, numbers, and special characters, special characters include `! @ # $ % ^ & * ( ) - _ + = [ ] { } : ; > < ? | ~ , .`, and this reqirement is able to be closed by adding enableStrongPassword 0 in taos.cfg, or by the following SQL:
|
||||||
|
```sql
|
||||||
|
alter all dnode 'EnableStrongPassword' '0'
|
||||||
|
```
|
||||||
- sysinfo: Whether the user can view system information. 1 means they can view it, 0 means they cannot. System information includes server configuration information, various node information such as dnode, query node (qnode), etc., as well as storage-related information, etc. The default is to view system information.
|
- sysinfo: Whether the user can view system information. 1 means they can view it, 0 means they cannot. System information includes server configuration information, various node information such as dnode, query node (qnode), etc., as well as storage-related information, etc. The default is to view system information.
|
||||||
- createdb: Whether the user can create databases. 1 means they can create databases, 0 means they cannot. The default value is 0. // Supported starting from TDengine Enterprise version 3.3.2.0
|
- createdb: Whether the user can create databases. 1 means they can create databases, 0 means they cannot. The default value is 0. // Supported starting from TDengine Enterprise version 3.3.2.0
|
||||||
|
|
||||||
|
|
|
@ -53,6 +53,8 @@ It is not necessary to configure your cluster specifically for active-active mod
|
||||||
- The sink endpoint is the FQDN of TDengine on the secondary node.
|
- The sink endpoint is the FQDN of TDengine on the secondary node.
|
||||||
- You can use the native connection (port 6030) or WebSocket connection (port 6041).
|
- You can use the native connection (port 6030) or WebSocket connection (port 6041).
|
||||||
- You can specify one or more databases to replicate only the data contained in those databases. If you do not specify a database, all databases on the node are replicated except for `information_schema`, `performance_schema`, `log`, and `audit`.
|
- You can specify one or more databases to replicate only the data contained in those databases. If you do not specify a database, all databases on the node are replicated except for `information_schema`, `performance_schema`, `log`, and `audit`.
|
||||||
|
- New databases in both sides will be detected periodically to start replication, with optional `--new-database-checking-interval <SECONDS>` argument.
|
||||||
|
- New databases checking will be disabled with `--no-new-databases`.
|
||||||
|
|
||||||
When the command is successful, the replica ID is displayed. You can use this ID to add other databases to the replication task if necessary.
|
When the command is successful, the replica ID is displayed. You can use this ID to add other databases to the replication task if necessary.
|
||||||
|
|
||||||
|
@ -97,7 +99,6 @@ You can manage your active-active deployment with the following commands:
|
||||||
:::note
|
:::note
|
||||||
- This command cannot create duplicate tasks. It only adds the specified databases to the specified task.
|
- This command cannot create duplicate tasks. It only adds the specified databases to the specified task.
|
||||||
- The replica ID is globally unique within a taosX instance and is independent of the source/sink combination.
|
- The replica ID is globally unique within a taosX instance and is independent of the source/sink combination.
|
||||||
|
|
||||||
:::
|
:::
|
||||||
|
|
||||||
2. Check the status of a task:
|
2. Check the status of a task:
|
||||||
|
@ -124,6 +125,8 @@ You can manage your active-active deployment with the following commands:
|
||||||
|
|
||||||
If you specify a database, replication for that database is stopped. If you do not specify a database, all replication tasks on the ID are stopped. If you do not specify an ID, all replication tasks on the instance are stopped.
|
If you specify a database, replication for that database is stopped. If you do not specify a database, all replication tasks on the ID are stopped. If you do not specify an ID, all replication tasks on the instance are stopped.
|
||||||
|
|
||||||
|
Use `--no-new-databases` to not stop new-databases checking.
|
||||||
|
|
||||||
4. Restart a replication task:
|
4. Restart a replication task:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
|
@ -132,6 +135,14 @@ You can manage your active-active deployment with the following commands:
|
||||||
|
|
||||||
If you specify a database, replication for that database is restarted. If you do not specify a database, all replication tasks in the instance are restarted. If you do not specify an ID, all replication tasks on the instance are restarted.
|
If you specify a database, replication for that database is restarted. If you do not specify a database, all replication tasks in the instance are restarted. If you do not specify an ID, all replication tasks on the instance are restarted.
|
||||||
|
|
||||||
|
5. Update new databases checking interval:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
taosx replica update id --new-database-checking-interval <SECONDS>
|
||||||
|
```
|
||||||
|
|
||||||
|
This command will only update the checking interval for new databases.
|
||||||
|
|
||||||
5. Check the progress of a replication task:
|
5. Check the progress of a replication task:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
|
|
|
@ -22,8 +22,6 @@ Through the `TDengine Java connector`, Seeq can easily support querying time-ser
|
||||||
|
|
||||||
## Configure Data Source
|
## Configure Data Source
|
||||||
|
|
||||||
### Configuration of JDBC Connector
|
|
||||||
|
|
||||||
**Step 1**, Check the data storage location
|
**Step 1**, Check the data storage location
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
|
@ -42,9 +40,13 @@ sudo seeq restart
|
||||||
|
|
||||||
Use a browser to visit ip:34216 and follow the instructions to enter the license.
|
Use a browser to visit ip:34216 and follow the instructions to enter the license.
|
||||||
|
|
||||||
## Load TDengine Time-Series Data
|
## Data Analysis
|
||||||
|
|
||||||
This chapter demonstrates how to use the Seeq software to load TDengine time-series data.
|
### Scenario Introduction
|
||||||
|
|
||||||
|
The example scenario is a power system where users collect electricity usage data from power station instruments daily and store it in the TDengine cluster. Now, users want to predict how power consumption will develop and purchase more equipment to support it. User power consumption varies with monthly orders, and considering seasonal changes, power consumption will differ. This city is located in the northern hemisphere, so more electricity is used in summer. We simulate data to reflect these assumptions.
|
||||||
|
|
||||||
|
### Data preparation
|
||||||
|
|
||||||
**Step 1**, Create tables in TDengine.
|
**Step 1**, Create tables in TDengine.
|
||||||
|
|
||||||
|
@ -246,12 +248,6 @@ The source code is hosted on [GitHub Repository](https://github.com/sangshuduo/t
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## Data Analysis
|
|
||||||
|
|
||||||
### Scenario Introduction
|
|
||||||
|
|
||||||
The example scenario is a power system where users collect electricity usage data from power station instruments daily and store it in the TDengine cluster. Now, users want to predict how power consumption will develop and purchase more equipment to support it. User power consumption varies with monthly orders, and considering seasonal changes, power consumption will differ. This city is located in the northern hemisphere, so more electricity is used in summer. We simulate data to reflect these assumptions.
|
|
||||||
|
|
||||||
### Using Seeq Workbench
|
### Using Seeq Workbench
|
||||||
|
|
||||||
Log in to the Seeq service page and create a new Seeq Workbench. By selecting data sources from search results and choosing different tools as needed, you can display data or make predictions. For detailed usage methods, refer to the [official knowledge base](https://support.seeq.com/space/KB/146440193/Seeq+Workbench).
|
Log in to the Seeq service page and create a new Seeq Workbench. By selecting data sources from search results and choosing different tools as needed, you can display data or make predictions. For detailed usage methods, refer to the [official knowledge base](https://support.seeq.com/space/KB/146440193/Seeq+Workbench).
|
||||||
|
|
|
@ -7,36 +7,39 @@ Apache Superset is a modern enterprise level business intelligence (BI) web appl
|
||||||
It is supported by the Apache Software Foundation and is an open source project with an active community and rich ecosystem.
|
It is supported by the Apache Software Foundation and is an open source project with an active community and rich ecosystem.
|
||||||
Apache Superset provides an intuitive user interface that makes creating, sharing, and visualizing data simple, while supporting multiple data sources and rich visualization options.
|
Apache Superset provides an intuitive user interface that makes creating, sharing, and visualizing data simple, while supporting multiple data sources and rich visualization options.
|
||||||
|
|
||||||
Through the Python connector of TDengine, Superset can support TDengine data sources and provide functions such as data presentation and analysis
|
Through the Python connector of TDengine, Superset can support TDengine data sources and provide functions such as data presentation and analysis.
|
||||||
|
|
||||||
## Prerequisites
|
## Prerequisites
|
||||||
|
|
||||||
Prepare the following environment:
|
Prepare the following environment:
|
||||||
- TDengine is installed and running normally (both Enterprise and Community versions are available)
|
|
||||||
- taosAdapter is running normally, refer to [taosAdapter](../../../tdengine-reference/components/taosadapter/)
|
|
||||||
- Apache Superset version 2.1.0 or above is already installed, refre to [Apache Superset](https://superset.apache.org/)
|
|
||||||
|
|
||||||
## Install TDengine Python Connector
|
- TDengine 3.2.3.0 and above version is installed and running normally (both Enterprise and Community versions are available).
|
||||||
|
- taosAdapter is running normally, refer to [taosAdapter](../../../tdengine-reference/components/taosadapter/).
|
||||||
|
- Apache Superset version 2.1.0 or above is already installed, refre to [Apache Superset](https://superset.apache.org/).
|
||||||
|
- Install Python connector driver, refer to [Python Client Library](../../../tdengine-reference/client-libraries/python).
|
||||||
|
|
||||||
|
:::tip
|
||||||
The Python connector of TDengine comes with a connection driver that supports Superset in versions 2.1.18 and later, which will be automatically installed in the Superset directory and provide data source services.
|
The Python connector of TDengine comes with a connection driver that supports Superset in versions 2.1.18 and later, which will be automatically installed in the Superset directory and provide data source services.
|
||||||
The connection uses the WebSocket protocol, so it is necessary to install the `taos-ws-py` component of TDengine separately. The complete installation script is as follows:
|
:::
|
||||||
```bash
|
|
||||||
pip3 install taospy
|
|
||||||
pip3 install taos-ws-py
|
|
||||||
```
|
|
||||||
|
|
||||||
## Configure TDengine Connection In Superset
|
## Configure Data Source
|
||||||
|
|
||||||
|
**Step 1**, enter the new database connection page, [Superset] -> [Setting] -> [Database Connections] -> [+DATABASE].
|
||||||
|
|
||||||
|
**Step 2**, select TDengine database connection, select the `TDengine` option from the drop-down list of [SUPPORTED DATABASES].
|
||||||
|
|
||||||
**Step 1**, enter the new database connection page, "Superset" → "Setting" → "Database Connections" → "+DATABASE"
|
|
||||||
**Step 2**, select TDengine database connection, select the "TDengine" option from the drop-down list of "SUPPORTED DATABASES".
|
|
||||||
:::tip
|
:::tip
|
||||||
If there is no TDengine option in the drop-down list, please confirm that the steps of installing, `Superset` is first and `Python Connector` is second.
|
If there is no TDengine option in the drop-down list, please confirm that the steps of installing, `Superset` is first and `Python Connector` is second.
|
||||||
:::
|
:::
|
||||||
**Step 3**, write a name of connection in "DISPLAY NAME"
|
|
||||||
**Step 4**, The "SQLALCHEMY URL" field is a key connection information string, and it must be filled in correctly
|
**Step 3**, write a name of connection in [DISPLAY NAME].
|
||||||
|
|
||||||
|
**Step 4**, The [SQLALCHEMY URL] field is a key connection information string, and it must be filled in correctly.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
taosws://user:password@host:port
|
taosws://user:password@host:port
|
||||||
```
|
```
|
||||||
|
|
||||||
| Parameter | <center>Parameter Description</center> |
|
| Parameter | <center>Parameter Description</center> |
|
||||||
|:---------- |:--------------------------------------------------------- |
|
|:---------- |:--------------------------------------------------------- |
|
||||||
|user | Username for logging into TDengine database |
|
|user | Username for logging into TDengine database |
|
||||||
|
@ -44,32 +47,34 @@ taosws://user:password@host:port
|
||||||
|host | Name of the host where the TDengine database is located |
|
|host | Name of the host where the TDengine database is located |
|
||||||
|port | The port that provides WebSocket services, default is 6041 |
|
|port | The port that provides WebSocket services, default is 6041 |
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
The TDengine database installed on this machine provides WebSocket service port 6041, using the default username and password, "SQLALCHEMY URL" is:
|
|
||||||
|
The TDengine database installed on this machine provides WebSocket service port 6041, using the default username and password, `SQLALCHEMY URL` is:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
taosws://root:taosdata@localhost:6041
|
taosws://root:taosdata@localhost:6041
|
||||||
```
|
```
|
||||||
**Step 5**, configure the connection string, click "TEST CONNECTION" to test if the connection can be successful. After passing the test, click the "CONNECT" button to complete the connection
|
|
||||||
|
**Step 5**, configure the connection string, click "TEST CONNECTION" to test if the connection can be successful. After passing the test, click the "CONNECT" button to complete the connection.
|
||||||
|
|
||||||
|
## Data Analysis
|
||||||
|
|
||||||
## Start
|
### Data preparation
|
||||||
|
|
||||||
There is no difference in the use of TDengine data source compared to other data sources. Here is a brief introduction to basic data queries:
|
There is no difference in the use of TDengine data source compared to other data sources. Here is a brief introduction to basic data queries:
|
||||||
1. Click the "+" button in the upper right corner of the Superset interface, select "SQL query", and enter the query interface
|
|
||||||
2. Select the "TDengine" data source that has been created earlier from the dropdown list of "DATABASES" in the upper left corner
|
|
||||||
3. Select the name of the database to be operated on from the drop-down list of "SCHEMA" (system libraries are not displayed)
|
|
||||||
4. "SEE TABLE SCHEMA" select the name of the super table or regular table to be operated on (sub tables are not displayed)
|
|
||||||
5. Subsequently, the schema information of the selected table will be displayed in the following area
|
|
||||||
6. In the SQL editor area, any SQL statement that conforms to TDengine syntax can be entered for execution
|
|
||||||
|
|
||||||
## Example
|
1. Click the [+] button in the upper right corner of the Superset interface, select [SQL query], and enter the query interface.
|
||||||
|
2. Select the `TDengine` data source that has been created earlier from the dropdown list of [DATABASES] in the upper left corner.
|
||||||
|
3. Select the name of the database to be operated on from the drop-down list of [SCHEMA] (system libraries are not displayed).
|
||||||
|
4. [SEE TABLE SCHEMA] select the name of the super table or regular table to be operated on (sub tables are not displayed).
|
||||||
|
5. Subsequently, the schema information of the selected table will be displayed in the following area.
|
||||||
|
6. In the `SQL` editor area, any `SQL` statement that conforms to `TDengine` syntax can be entered for execution.
|
||||||
|
|
||||||
We chose two popular templates from the Superset Chart template to showcase their effects, using smart meter data as an example:
|
### Smart Meter Example
|
||||||
|
|
||||||
1. "Aggregate" Type, which displays the maximum voltage value collected per minute during the specified time period in Group 4
|
We chose two popular templates from the [Superset Chart] template to showcase their effects, using smart meter data as an example:
|
||||||
|
|
||||||

|
1. `Aggregate` Type, which displays the maximum voltage value collected per minute during the specified time period in Group 4.
|
||||||
|

|
||||||
2. "RAW RECORDS" Type, which displays the collected values of current and voltage during the specified time period in Group 4
|
2. `RAW RECORDS` Type, which displays the collected values of current and voltage during the specified time period in Group 4.
|
||||||
|

|
||||||

|
|
|
@ -10,8 +10,8 @@ Tableau is a well-known business intelligence tool that supports multiple data s
|
||||||
|
|
||||||
Prepare the following environment:
|
Prepare the following environment:
|
||||||
|
|
||||||
- TDengine 3.3.5.4 and above version is installed and running normally (both Enterprise and Community versions are available)
|
- TDengine 3.3.5.8 and above version is installed and running normally (both Enterprise and Community versions are available).
|
||||||
- taosAdapter is running normally, refer to [taosAdapter Reference](../../../tdengine-reference/components/taosadapter/)
|
- taosAdapter is running normally, refer to [taosAdapter Reference](../../../tdengine-reference/components/taosadapter/).
|
||||||
- Install and run Tableau Desktop (if not installed, please download and install Windows operating system 64-bit [Download Tableau Desktop](https://www.tableau.com/products/desktop/download)). Install Tableau please refer to [Tableau Desktop](https://www.tableau.com).
|
- Install and run Tableau Desktop (if not installed, please download and install Windows operating system 64-bit [Download Tableau Desktop](https://www.tableau.com/products/desktop/download)). Install Tableau please refer to [Tableau Desktop](https://www.tableau.com).
|
||||||
- Download the latest Windows operating system X64 client driver from the TDengine official website and install it, refer to [Install ODBC Driver](../../../tdengine-reference/client-libraries/odbc/#Installation).
|
- Download the latest Windows operating system X64 client driver from the TDengine official website and install it, refer to [Install ODBC Driver](../../../tdengine-reference/client-libraries/odbc/#Installation).
|
||||||
|
|
||||||
|
@ -19,6 +19,10 @@ Prepare the following environment:
|
||||||
|
|
||||||
**Step 1**, Search and open the "ODBC Data Source (64 bit)" management tool in the Start menu of the Windows operating system and configure it, refer to [Install ODBC Driver](../../../tdengine-reference/client-libraries/odbc/#Installation).
|
**Step 1**, Search and open the "ODBC Data Source (64 bit)" management tool in the Start menu of the Windows operating system and configure it, refer to [Install ODBC Driver](../../../tdengine-reference/client-libraries/odbc/#Installation).
|
||||||
|
|
||||||
|
:::tip
|
||||||
|
It should be noted that when configuring the ODBC data source for Tableau, the [Database] configuration item on the TDengine ODBC data source configuration page is required. You need to select a database that can be successfully connected.
|
||||||
|
:::
|
||||||
|
|
||||||
**Step 2**, Start Tableau in the Windows system environment, then search for "ODBC" on its connection page and select "Other Databases (ODBC)".
|
**Step 2**, Start Tableau in the Windows system environment, then search for "ODBC" on its connection page and select "Other Databases (ODBC)".
|
||||||
|
|
||||||
**Step 3**, Click the `DSN` radio button, then select the configured data source (MyTDengine), and click the `Connect` button. After the connection is successful, delete the content of the string attachment, and finally click the `Sign In` button.
|
**Step 3**, Click the `DSN` radio button, then select the configured data source (MyTDengine), and click the `Connect` button. After the connection is successful, delete the content of the string attachment, and finally click the `Sign In` button.
|
||||||
|
|
|
@ -10,7 +10,7 @@ toc_max_heading_level: 4
|
||||||
|
|
||||||
Prepare the following environment:
|
Prepare the following environment:
|
||||||
|
|
||||||
- TDengine 3.3.5.7 and above version is installed and running normally (both Enterprise and Community versions are available).
|
- TDengine 3.3.5.8 and above version is installed and running normally (both Enterprise and Community versions are available).
|
||||||
- taosAdapter is running normally, refer to [taosAdapter Reference](../../../tdengine-reference/components/taosadapter/).
|
- taosAdapter is running normally, refer to [taosAdapter Reference](../../../tdengine-reference/components/taosadapter/).
|
||||||
- Install and run Excel. If not installed, please download and install it. For specific instructions, please refer to Microsoft's official documentation.
|
- Install and run Excel. If not installed, please download and install it. For specific instructions, please refer to Microsoft's official documentation.
|
||||||
- Download the latest Windows operating system X64 client driver from the TDengine official website and install it, refer to [Install ODBC Driver](../../../tdengine-reference/client-libraries/odbc/#Installation).
|
- Download the latest Windows operating system X64 client driver from the TDengine official website and install it, refer to [Install ODBC Driver](../../../tdengine-reference/client-libraries/odbc/#Installation).
|
||||||
|
|
|
@ -84,12 +84,12 @@ After modifying configuration file parameters, you need to restart the *taosd* s
|
||||||
|
|
||||||
|Parameter Name |Supported Version |Dynamic Modification|Description|
|
|Parameter Name |Supported Version |Dynamic Modification|Description|
|
||||||
|-----------------------|-------------------------|--------------------|------------|
|
|-----------------------|-------------------------|--------------------|------------|
|
||||||
|timezone | |Not supported |Time zone; defaults to dynamically obtaining the current time zone setting from the system|
|
|timezone | | since 3.1.0.0 |Time zone; defaults to dynamically obtaining the current time zone setting from the system|
|
||||||
|locale | |Not supported |System locale information and encoding format, defaults to obtaining from the system|
|
|locale | | since 3.1.0.0 |System locale information and encoding format, defaults to obtaining from the system|
|
||||||
|charset | |Not supported |Character set encoding, defaults to obtaining from the system|
|
|charset | | since 3.1.0.0 |Character set encoding, defaults to obtaining from the system|
|
||||||
|
|
||||||
:::info
|
:::info
|
||||||
|
#### Explanation of Regional Related Parameters
|
||||||
1. To address the issue of data writing and querying across multiple time zones, TDengine uses Unix Timestamps to record and store timestamps. The nature of Unix Timestamps ensures that the timestamps generated are consistent at any given moment across any time zone. It is important to note that the conversion to Unix Timestamps is done on the client side. To ensure that other forms of time on the client are correctly converted to Unix Timestamps, it is necessary to set the correct time zone.
|
1. To address the issue of data writing and querying across multiple time zones, TDengine uses Unix Timestamps to record and store timestamps. The nature of Unix Timestamps ensures that the timestamps generated are consistent at any given moment across any time zone. It is important to note that the conversion to Unix Timestamps is done on the client side. To ensure that other forms of time on the client are correctly converted to Unix Timestamps, it is necessary to set the correct time zone.
|
||||||
|
|
||||||
On Linux/macOS, the client automatically reads the time zone information set by the system. Users can also set the time zone in the configuration file in various ways. For example:
|
On Linux/macOS, the client automatically reads the time zone information set by the system. Users can also set the time zone in the configuration file in various ways. For example:
|
||||||
|
@ -534,29 +534,23 @@ The `taosd_vnodes_role` table records virtual node role information.
|
||||||
| duration | VARCHAR | tag | SQL execution duration, value range: 3-10s, 10-100s, 100-1000s, 1000s- |
|
| duration | VARCHAR | tag | SQL execution duration, value range: 3-10s, 10-100s, 100-1000s, 1000s- |
|
||||||
| cluster_id | VARCHAR | tag | cluster id |
|
| cluster_id | VARCHAR | tag | cluster id |
|
||||||
|
|
||||||
## Log Related
|
### taos\_slow\_sql\_detail 表
|
||||||
|
|
||||||
TDengine records the system's operational status through log files, helping users monitor the system's condition and troubleshoot issues. This section mainly introduces the related explanations of two system logs: taosc and taosd.
|
`taos_slow_sql_detail` records slow query detail information.The rule of the table name is `{user}_{db}_{ip}_clusterId_{cluster_id}`
|
||||||
|
|
||||||
TDengine's log files mainly include two types: normal logs and slow logs.
|
| field | type | is\_tag | comment |
|
||||||
|
| :------------- | :-------- | :------ | :---------------------------------------------------- |
|
||||||
1. Normal Log Behavior Explanation
|
| start\_ts | TIMESTAMP | | sql start exec time in client, ms,primary key |
|
||||||
1. Multiple client processes can be started on the same machine, so the client log naming convention is taoslogX.Y, where X is a number, either empty or from 0 to 9, and Y is a suffix, either 0 or 1.
|
| request\_id | UINT64_T | | sql request id, random hash |
|
||||||
2. Only one server process can exist on the same machine. Therefore, the server log naming convention is taosdlog.Y, where Y is a suffix, either 0 or 1.
|
| query\_time | INT32_T | | sql exec time, ms |
|
||||||
|
| code | INT32_T | | sql return code, 0 success |
|
||||||
The rules for determining the number and suffix are as follows (assuming the log path is /var/log/taos/):
|
| error\_info | VARCHAR | | error info if sql exec failed |
|
||||||
1. Determining the number: Use 10 numbers as the log naming convention, /var/log/taos/taoslog0.Y - /var/log/taos/taoslog9.Y, check each number sequentially to find the first unused number as the log file number for that process. If all 10 numbers are used by processes, do not use a number, i.e., /var/log/taos/taoslog.Y, and all processes write to the same file (number is empty).
|
| type | INT8_T | | sql type(1-query, 2-insert, 4-others) |
|
||||||
2. Determining the suffix: 0 or 1. For example, if the number is determined to be 3, the alternative log file names would be /var/log/taos/taoslog3.0 /var/log/taos/taoslog3.1. If both files do not exist, use suffix 0; if one exists and the other does not, use the existing suffix. If both exist, use the suffix of the file that was modified most recently.
|
| rows\_num | INT64_T | | sql result rows num |
|
||||||
3. If the log file exceeds the configured number of lines numOfLogLines, it will switch suffixes and continue logging, e.g., /var/log/taos/taoslog3.0 is full, switch to /var/log/taos/taoslog3.1 to continue logging. /var/log/taos/taoslog3.0 will be renamed with a timestamp suffix and compressed for storage (handled by an asynchronous thread).
|
| sql | VARCHAR | | sql sting |
|
||||||
4. Control how many days log files are kept through the configuration logKeepDays, logs older than a certain number of days will be deleted when new logs are compressed and stored. It is not based on natural days.
|
| process\_name | VARCHAR | | process name |
|
||||||
|
| process\_id | VARCHAR | | process id |
|
||||||
In addition to recording normal logs, SQL statements that take longer than the configured time will be recorded in the slow logs. Slow log files are mainly used for analyzing system performance and troubleshooting performance issues.
|
| db | VARCHAR | TAG | which db the sql belong to |
|
||||||
|
| user | VARCHAR | TAG | the user that exec this sql |
|
||||||
2. Slow Log Behavior Explanation
|
| ip | VARCHAR | TAG | the client ip that exec this sql |
|
||||||
1. Slow logs are recorded both locally in slow log files and sent to taosKeeper for structured storage via taosAdapter (monitor switch must be turned on).
|
| cluster\_id | VARCHAR | TAG | cluster id |
|
||||||
2. Slow log file storage rules are:
|
|
||||||
1. One slow log file per day; if there are no slow logs for the day, there is no file for that day.
|
|
||||||
2. The file name is taosSlowLog.yyyy-mm-dd (taosSlowLog.2024-08-02), and the log storage path is configured through logDir.
|
|
||||||
3. Logs from multiple clients are stored in the same taosSlowLog.yyyy.mm.dd file under the respective log path.
|
|
||||||
4. Slow log files are not automatically deleted or compressed.
|
|
||||||
5. Uses the same three parameters as normal log files: logDir, minimalLogDirGB, asyncLog. The other two parameters, numOfLogLines and logKeepDays, do not apply to slow logs.
|
|
||||||
|
|
|
@ -37,6 +37,6 @@ Removed `` ‘“`\ `` (single and double quotes, apostrophe, backslash, space)
|
||||||
- Number of databases, supertables, and tables are not limited by the system, only by system resources
|
- Number of databases, supertables, and tables are not limited by the system, only by system resources
|
||||||
- Number of replicas for a database can only be set to 1 or 3
|
- Number of replicas for a database can only be set to 1 or 3
|
||||||
- Maximum length of username is 23 bytes
|
- Maximum length of username is 23 bytes
|
||||||
- Maximum length of user password is 31 bytes
|
- Maximum length of user password is 255 bytes
|
||||||
- Total number of data rows depends on available resources
|
- Total number of data rows depends on available resources
|
||||||
- Maximum number of virtual nodes for a single database is 1024
|
- Maximum number of virtual nodes for a single database is 1024
|
||||||
|
|
|
@ -23,11 +23,11 @@ The list of keywords is as follows:
|
||||||
| ALIVE | |
|
| ALIVE | |
|
||||||
| ALL | |
|
| ALL | |
|
||||||
| ALTER | |
|
| ALTER | |
|
||||||
| ANALYZE | Version 3.3.4.3 and later |
|
| ANALYZE | 3.3.4.3+ |
|
||||||
| AND | |
|
| AND | |
|
||||||
| ANODE | Version 3.3.4.3 and later |
|
| ANODE | 3.3.4.3+ |
|
||||||
| ANODES | Version 3.3.4.3 and later |
|
| ANODES | 3.3.4.3+ |
|
||||||
| ANOMALY_WINDOW | Version 3.3.4.3 and later |
|
| ANOMALY_WINDOW | 3.3.4.3+ |
|
||||||
| ANTI | |
|
| ANTI | |
|
||||||
| APPS | |
|
| APPS | |
|
||||||
| ARBGROUPS | |
|
| ARBGROUPS | |
|
||||||
|
@ -37,6 +37,8 @@ The list of keywords is as follows:
|
||||||
| ASOF | |
|
| ASOF | |
|
||||||
| AT_ONCE | |
|
| AT_ONCE | |
|
||||||
| ATTACH | |
|
| ATTACH | |
|
||||||
|
| AUTO | 3.3.5.0+ |
|
||||||
|
| ASSIGN | 3.3.6.0+ |
|
||||||
|
|
||||||
### B
|
### B
|
||||||
|
|
||||||
|
@ -78,12 +80,16 @@ The list of keywords is as follows:
|
||||||
| CLIENT_VERSION | |
|
| CLIENT_VERSION | |
|
||||||
| CLUSTER | |
|
| CLUSTER | |
|
||||||
| COLON | |
|
| COLON | |
|
||||||
|
| COLS | 3.3.6.0+ |
|
||||||
| COLUMN | |
|
| COLUMN | |
|
||||||
| COMMA | |
|
| COMMA | |
|
||||||
| COMMENT | |
|
| COMMENT | |
|
||||||
| COMP | |
|
| COMP | |
|
||||||
| COMPACT | |
|
| COMPACT | |
|
||||||
| COMPACTS | |
|
| COMPACTS | |
|
||||||
|
| COMPACT_INTERVAL | 3.3.5.0+ |
|
||||||
|
| COMPACT_TIME_OFFSET | 3.3.5.0+ |
|
||||||
|
| COMPACT_TIME_RANGE | 3.3.5.0+ |
|
||||||
| CONCAT | |
|
| CONCAT | |
|
||||||
| CONFLICT | |
|
| CONFLICT | |
|
||||||
| CONNECTION | |
|
| CONNECTION | |
|
||||||
|
@ -114,6 +120,7 @@ The list of keywords is as follows:
|
||||||
| DESC | |
|
| DESC | |
|
||||||
| DESCRIBE | |
|
| DESCRIBE | |
|
||||||
| DETACH | |
|
| DETACH | |
|
||||||
|
| DISK_INFO | 3.3.5.0+ |
|
||||||
| DISTINCT | |
|
| DISTINCT | |
|
||||||
| DISTRIBUTED | |
|
| DISTRIBUTED | |
|
||||||
| DIVIDE | |
|
| DIVIDE | |
|
||||||
|
@ -148,19 +155,19 @@ The list of keywords is as follows:
|
||||||
|Keyword|Description|
|
|Keyword|Description|
|
||||||
|----------------------|-|
|
|----------------------|-|
|
||||||
| FAIL | |
|
| FAIL | |
|
||||||
| FHIGH | Version 3.3.4.3 and later |
|
| FHIGH | 3.3.4.3+ |
|
||||||
| FILE | |
|
| FILE | |
|
||||||
| FILL | |
|
| FILL | |
|
||||||
| FILL_HISTORY | |
|
| FILL_HISTORY | |
|
||||||
| FIRST | |
|
| FIRST | |
|
||||||
| FLOAT | |
|
| FLOAT | |
|
||||||
| FLOW | Version 3.3.4.3 and later |
|
| FLOW | 3.3.4.3+ |
|
||||||
| FLUSH | |
|
| FLUSH | |
|
||||||
| FOR | |
|
| FOR | |
|
||||||
| FORCE | |
|
| FORCE | |
|
||||||
| FORCE_WINDOW_CLOSE | Version 3.3.4.3 and later |
|
| FORCE_WINDOW_CLOSE | 3.3.4.3+ |
|
||||||
| FROM | |
|
| FROM | |
|
||||||
| FROWTS | Version 3.3.4.3 and later |
|
| FROWTS | 3.3.4.3+ |
|
||||||
| FULL | |
|
| FULL | |
|
||||||
| FUNCTION | |
|
| FUNCTION | |
|
||||||
| FUNCTIONS | |
|
| FUNCTIONS | |
|
||||||
|
@ -209,6 +216,7 @@ The list of keywords is as follows:
|
||||||
| INTO | |
|
| INTO | |
|
||||||
| IPTOKEN | |
|
| IPTOKEN | |
|
||||||
| IROWTS | |
|
| IROWTS | |
|
||||||
|
| IROWTS_ORIGIN | 3.3.5.0+ |
|
||||||
| IS | |
|
| IS | |
|
||||||
| IS_IMPORT | |
|
| IS_IMPORT | |
|
||||||
| ISFILLED | |
|
| ISFILLED | |
|
||||||
|
@ -242,6 +250,7 @@ The list of keywords is as follows:
|
||||||
| LEADER | |
|
| LEADER | |
|
||||||
| LEADING | |
|
| LEADING | |
|
||||||
| LEFT | |
|
| LEFT | |
|
||||||
|
| LEVEL | 3.3.0.0 - 3.3.2.11 |
|
||||||
| LICENCES | |
|
| LICENCES | |
|
||||||
| LIKE | |
|
| LIKE | |
|
||||||
| LIMIT | |
|
| LIMIT | |
|
||||||
|
@ -263,6 +272,7 @@ The list of keywords is as follows:
|
||||||
| MEDIUMBLOB | |
|
| MEDIUMBLOB | |
|
||||||
| MERGE | |
|
| MERGE | |
|
||||||
| META | |
|
| META | |
|
||||||
|
| META_ONLY | 3.3.6.0+ |
|
||||||
| MINROWS | |
|
| MINROWS | |
|
||||||
| MINUS | |
|
| MINUS | |
|
||||||
| MNODE | |
|
| MNODE | |
|
||||||
|
@ -281,6 +291,8 @@ The list of keywords is as follows:
|
||||||
| NONE | |
|
| NONE | |
|
||||||
| NORMAL | |
|
| NORMAL | |
|
||||||
| NOT | |
|
| NOT | |
|
||||||
|
| NOTIFY | 3.3.6.0+ |
|
||||||
|
| NOTIFY_HISTORY | 3.3.6.0+ |
|
||||||
| NOTNULL | |
|
| NOTNULL | |
|
||||||
| NOW | |
|
| NOW | |
|
||||||
| NULL | |
|
| NULL | |
|
||||||
|
@ -295,6 +307,7 @@ The list of keywords is as follows:
|
||||||
| OFFSET | |
|
| OFFSET | |
|
||||||
| ON | |
|
| ON | |
|
||||||
| ONLY | |
|
| ONLY | |
|
||||||
|
| ON_FAILURE | 3.3.6.0+ |
|
||||||
| OR | |
|
| OR | |
|
||||||
| ORDER | |
|
| ORDER | |
|
||||||
| OUTER | |
|
| OUTER | |
|
||||||
|
@ -345,6 +358,7 @@ The list of keywords is as follows:
|
||||||
| RATIO | |
|
| RATIO | |
|
||||||
| READ | |
|
| READ | |
|
||||||
| RECURSIVE | |
|
| RECURSIVE | |
|
||||||
|
| REGEXP | 3.3.6.0+ |
|
||||||
| REDISTRIBUTE | |
|
| REDISTRIBUTE | |
|
||||||
| REM | |
|
| REM | |
|
||||||
| REPLACE | |
|
| REPLACE | |
|
||||||
|
@ -418,7 +432,7 @@ The list of keywords is as follows:
|
||||||
| TABLE_PREFIX | |
|
| TABLE_PREFIX | |
|
||||||
| TABLE_SUFFIX | |
|
| TABLE_SUFFIX | |
|
||||||
| TABLES | |
|
| TABLES | |
|
||||||
| tag | |
|
| TAG | |
|
||||||
| TAGS | |
|
| TAGS | |
|
||||||
| TBNAME | |
|
| TBNAME | |
|
||||||
| THEN | |
|
| THEN | |
|
||||||
|
@ -435,6 +449,7 @@ The list of keywords is as follows:
|
||||||
| TRANSACTIONS | |
|
| TRANSACTIONS | |
|
||||||
| TRIGGER | |
|
| TRIGGER | |
|
||||||
| TRIM | |
|
| TRIM | |
|
||||||
|
| TRUE_FOR | 3.3.6.0+ |
|
||||||
| TSDB_PAGESIZE | |
|
| TSDB_PAGESIZE | |
|
||||||
| TSERIES | |
|
| TSERIES | |
|
||||||
| TSMA | |
|
| TSMA | |
|
||||||
|
|
|
@ -71,7 +71,10 @@ WebSocket Connector Historical Versions:
|
||||||
|
|
||||||
|WebSocket Connector Version | Major Changes | TDengine Version|
|
|WebSocket Connector Version | Major Changes | TDengine Version|
|
||||||
| ----------------------- | -------------------------------------------------------------------------------------------------- | ----------------- |
|
| ----------------------- | -------------------------------------------------------------------------------------------------- | ----------------- |
|
||||||
|0.3.5 | Added support for VARBINARY and GEOMETRY types, fixed known issues. | 3.3.0.0 and higher|
|
|0.3.9 | Fix the problem of incomplete data retrieval when customizing the number of rows with the "fetchmany" method. | - |
|
||||||
|
|0.3.8 | Supported connecting SuperSet to the TDengine cloud service instance. | - |
|
||||||
|
|0.3.5 | Fixed the issues in the crypto provider. | - |
|
||||||
|
|0.3.4 | Supported varbinary and geometry data type. | 3.3.0.0 and higher |
|
||||||
|0.3.2 | Optimize WebSocket SQL query and insertion performance, modify readme and documentation, fix known issues. | 3.2.3.0 and higher|
|
|0.3.2 | Optimize WebSocket SQL query and insertion performance, modify readme and documentation, fix known issues. | 3.2.3.0 and higher|
|
||||||
|0.2.9 | Known issue fixes. | - |
|
|0.2.9 | Known issue fixes. | - |
|
||||||
|0.2.5 | 1. Data subscription supports obtaining and resetting consumption progress. <br/>2 Support schemaless. <br/>3 Support STMT. | - |
|
|0.2.5 | 1. Data subscription supports obtaining and resetting consumption progress. <br/>2 Support schemaless. <br/>3 Support STMT. | - |
|
||||||
|
|
|
@ -537,8 +537,10 @@ This document details the server error codes that may be encountered when using
|
||||||
|
|
||||||
| Error Code | Description | Possible Error Scenarios or Reasons | Recommended Actions for Users |
|
| Error Code | Description | Possible Error Scenarios or Reasons | Recommended Actions for Users |
|
||||||
| ---------- | --------------------- | ------------------------------------------------------------ | -------------------------------------------- |
|
| ---------- | --------------------- | ------------------------------------------------------------ | -------------------------------------------- |
|
||||||
|
| 0x800003E6 | Consumer not exist | Consumer timeout offline | rebuild consumer to subscribe data again |
|
||||||
|
| 0x800003EA | Consumer not ready | Consumer rebalancing | retry after 2s |
|
||||||
| 0x80004000 | Invalid message | The subscribed data is illegal, generally does not occur | Check the client-side error logs for details |
|
| 0x80004000 | Invalid message | The subscribed data is illegal, generally does not occur | Check the client-side error logs for details |
|
||||||
| 0x80004001 | Consumer mismatch | The vnode requested for subscription and the reassigned vnode are inconsistent, usually occurs when new consumers join the same consumer group | Internal error, not exposed to users |
|
| 0x80004001 | Consumer mismatch | The vnode requested for subscription and the reassigned vnode are inconsistent, usually occurs when new consumers join the same consumer group | Internal error |
|
||||||
| 0x80004002 | Consumer closed | The consumer no longer exists | Check if it has already been closed |
|
| 0x80004002 | Consumer closed | The consumer no longer exists | Check if it has already been closed |
|
||||||
| 0x80004017 | Invalid status, please subscribe topic first | tmq status invalidate | Without calling subscribe, directly poll data |
|
| 0x80004017 | Invalid status, please subscribe topic first | tmq status invalidate | Without calling subscribe, directly poll data |
|
||||||
| 0x80004100 | Stream task not exist | The stream computing task does not exist | Check the server-side error logs |
|
| 0x80004100 | Stream task not exist | The stream computing task does not exist | Check the server-side error logs |
|
||||||
|
|
|
@ -25,6 +25,10 @@ Download links for TDengine 3.x version installation packages are as follows:
|
||||||
|
|
||||||
import Release from "/components/ReleaseV3";
|
import Release from "/components/ReleaseV3";
|
||||||
|
|
||||||
|
## 3.3.5.8
|
||||||
|
|
||||||
|
<Release type="tdengine" version="3.3.5.8" />
|
||||||
|
|
||||||
## 3.3.5.2
|
## 3.3.5.2
|
||||||
|
|
||||||
<Release type="tdengine" version="3.3.5.2" />
|
<Release type="tdengine" version="3.3.5.2" />
|
||||||
|
|
|
@ -0,0 +1,66 @@
|
||||||
|
---
|
||||||
|
title: TDengine 3.3.5.8 Release Notes
|
||||||
|
sidebar_label: 3.3.5.8
|
||||||
|
description: Version 3.3.5.8 Notes
|
||||||
|
slug: /release-history/release-notes/3.3.5.8
|
||||||
|
---
|
||||||
|
|
||||||
|
## Features
|
||||||
|
1. feat: suppport tmq subscription with ONLY META in JDBC
|
||||||
|
2. feat: support multiple-line SQL editor in Grafana
|
||||||
|
3. feat: add support for VARBINARY/GEOMETRY in ODBC
|
||||||
|
4. feat: support TDengine with ODBC dirver in Excel
|
||||||
|
5. feat: taosX agent use specific port range in local connection
|
||||||
|
|
||||||
|
## Enhancements
|
||||||
|
1. enh: websocket handle consumer error when tmq polled nothing
|
||||||
|
2. enh: JDBC add support for unsigned integers
|
||||||
|
3. enh: expose global.written_concurrent configuration for kafka/mqtt/csv in Explorer
|
||||||
|
4. enh: support integration with TDgpt in community version
|
||||||
|
5. enh: support BinaryRowData type in flink
|
||||||
|
6. enh: in stmt2 SQL statements, the LIMIT clause supports the use of ? as a parameter placeholder
|
||||||
|
7. enh: enable compression via websocket in taosX backup
|
||||||
|
8. enh: ODBC support SQL_ROWSET_SIZE in SQLSetStmtAttr
|
||||||
|
9. enh: expose num.of.consumers/writters configurations in Explorer
|
||||||
|
10. enh: Add connector files to the macOS installation package.
|
||||||
|
11. enh: handle errors when poll result is null in rust connector
|
||||||
|
12. enh: tsbs support csv output format
|
||||||
|
13. enh: add Classified Connections Counts table in TDinsight
|
||||||
|
14. enh: use consist float precision in explorer and tao shell
|
||||||
|
15. enh: flink table support update/delete
|
||||||
|
16. enh: taosX agent will resume connection when taosX server disconnected for long time
|
||||||
|
|
||||||
|
## Fixes
|
||||||
|
1. fix: explorer support signup email with dot `.`
|
||||||
|
2. fix: flock syscall error on aws cloud storage in taosAdapter
|
||||||
|
3. fix: modify boolean tag values in sub-tables results in erroneous metadata from data subscriptions.
|
||||||
|
4. fix: allow spaces in columns of csv in explorer datain
|
||||||
|
5. fix: resolved the issue of high CPU usage by the stmtbind thread when the system is in an idle state
|
||||||
|
6. fix: health state tick to idle when no data consumed
|
||||||
|
7. fix: fix security issues in JDBC sample code
|
||||||
|
8. fix: fix upgrade compaibility issue of taosX
|
||||||
|
9. fix: ODBC core when set SQL_ATTR_TXN_ISOLATION with SQLSetConnectAttr
|
||||||
|
10. fix: received/processed_messages should be reset when task rerun
|
||||||
|
11. fix: when restoring data using taosX, it may crash if the database is not specified
|
||||||
|
12. fix: when creating a database, the keep_time_offset options supports suffixes h (hours) and d (days) for time values
|
||||||
|
13. fix: potential deadlocks while drop stream
|
||||||
|
14. fix: failed to write data in a dual-replica database when a single dnode is disconnected from the network
|
||||||
|
15. fix: when querying the information_schema.ins_tables table, a "Sync leader is unreachable" error may be triggered if the Leader of the mnode changes.
|
||||||
|
16. fix: the time-filtering query results involving composite primary keys were incorrect after data compact
|
||||||
|
17. fix: when the join condition of the primary key column is not a simple equality condition, it may lead to incorrect JOIN results
|
||||||
|
18. fix: error caused by cursor.fetchmany with custom length in python taosws
|
||||||
|
19. fix: the issue where the "show grants" command returned an incorrect number of columns
|
||||||
|
20. fix: unexpected backup points before schedule executing
|
||||||
|
21. fix: taosX task does not restart after interrupted
|
||||||
|
22. fix: jdbc select server_version() caused mem high-usage
|
||||||
|
23. fix: when using the WHERE tbname IN () statement, executing LAST query may cause taosd crash if the subtables filtered out do not belong to the same super table
|
||||||
|
24. fix: after taosd exits abnormally and is restarted, if the WAL that has not been written to the data file is too large, it may cause an OOM error during startup
|
||||||
|
25. fix: when using interp interpolation, if the select list contains string constants or string tags, the returned string content may be incomplete.[#29353](https://github.com/taosdata/TDengine/issues/29353)
|
||||||
|
26. fix: when performing a JOIN query on a super table, using a subquery as the right table may lead to missing results
|
||||||
|
27. fix: syntax error while use DISTINCT and ORDER BY together.[#29263](https://github.com/taosdata/TDengine/issues/29263)
|
||||||
|
28. fix: when using the CAST function to convert a floating-point number to a binary and then performing a comparison, the result may be inaccurate due to loss of precision[#29382](https://github.com/taosdata/TDengine/issues/29382)
|
||||||
|
29. fix: after upgrading from version 3.3.4 to 3.3.5, the taosd service fails to start properly if the configured charset does not exist in the system
|
||||||
|
30. fix: websocket api timing field should not be negtive
|
||||||
|
31. fix: duplicates backup points in taosX
|
||||||
|
32. fix: configuration item s3BucketName was incorrectly set as a global variable, leading to failures while file uploads to S3.
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
---
|
||||||
|
title: Product Roadmap
|
||||||
|
---
|
||||||
|
|
||||||
|
The 2025 roadmap for TDengine OSS is described in the following table.
|
||||||
|
|
||||||
|
| Quarter | Feature |
|
||||||
|
| :----- | :----- |
|
||||||
|
| 2025Q1 | <ol><li>Virtual tables</li><li>Query engine: conditional expressions in <code>REGEXP</code>, <code>GREATEST</code>, <code>LEAST</code>, and <code>CAST</code> functions; improvements in single-row selection functions; time range interpolation with <code>INTERP</code></li><li>Storage engine: support for writing query results into supertables; <code>KEEP</code> parameter for supertables; performance improvements for the parameter binding interface</li><li>Stream processing: support for virtual tables; decreased compute resource usage; new mechanism for event notification; faster stream creation</li><li>Data types: support for the decimal data type</li><li>High availability: faster recovery from downtime; improved client failover</li><li>Stability: LTS release TDengine 3.3.6.x</li><li>JDBC driver: more efficient data ingestion</li><li>Ecosystem: integration with Microsoft Excel</li></ol> |
|
||||||
|
| 2025Q2 | <ol><li>Query engine: relaxed restrictions on <code>JOIN</code> queries; support for all mathematical functions in MySQL; integral, integral average, and continuous variance functions; optimization of the <code>CSUM</code> function; support for <code>COUNT(DISTINCT)</code> syntax; enhancements to event windows; faster filtering by tag; faster <code>INTERP</code> queries</li><li>Storage engine: decreased compute resource usage for TSMAs; improved write jitter</li><li>Stream processing: high availability of snodes</li><li>Data types: support for the blob data type</li><li>Data subscription: support for the MQTT protocol</li><li>High availability: faster replica configuration changes; faster recovery from downtime for clusters; improved data recovery after power outage</li><li>Observability: diagnostic tool for data ingestion</li></ol> |
|
||||||
|
| 2025Q3 | <ol><li>Query engine: more subqueries; support for all operators in MySQL; support for all time functions in MySQL; improved window calculation; reduced jitter in query performance; support for specifying columns in count windows</li><li>Storage engine: faster ingestion in SQL mode</li><li>Observability: diagnostic tool for queries; improved <code>EXPLAIN</code> output; monitoring of long-running tasks</li></ol> |
|
||||||
|
| 2025Q4 | <ol><li>Query engine: window functions (i.e. the <code>OVER</code> clause); support for all string, aggregation, and conditional functions in MySQL; sorting within groups for partition queries; controls for query resource usage; faster aggregate queries on subtables; time range interpolation in <code>INTERVAL</code> windows</li><li>Data types: support for variable-length strings</li><li>Caching: faster row-oriented caching</li><li>Observability: more insight into operations and maintenance</li></ol> |
|
||||||
|
|
||||||
|
For more information, see [TDengine Public Roadmap](https://github.com/orgs/taosdata/projects/4).
|
|
@ -4,19 +4,19 @@ sidebar_label: 文档首页
|
||||||
slug: /
|
slug: /
|
||||||
---
|
---
|
||||||
|
|
||||||
TDengine 是一款[开源](https://www.taosdata.com/tdengine/open_source_time-series_database)、[高性能](https://www.taosdata.com/fast)、[云原生](https://www.taosdata.com/tdengine/cloud_native_time-series_database)的<a href="https://www.taosdata.com/" data-internallinksmanager029f6b8e52c="2" title="时序数据库" target="_blank" rel="noopener">时序数据库</a>(<a href="https://www.taosdata.com/time-series-database" data-internallinksmanager029f6b8e52c="9" title="Time Series DataBase" target="_blank" rel="noopener">Time Series Database</a>, <a href="https://www.taosdata.com/tsdb" data-internallinksmanager029f6b8e52c="8" title="TSDB" target="_blank" rel="noopener">TSDB</a>), 它专为物联网、车联网、工业互联网、金融、IT 运维等场景优化设计。同时它还带有内建的缓存、流式计算、数据订阅等系统功能,能大幅减少系统设计的复杂度,降低研发和运营成本,是一款极简的时序数据处理平台。本文档是 TDengine 的用户手册,主要是介绍 TDengine 的基本概念、安装、使用、功能、开发接口、运营维护、TDengine 内核设计等等,它主要是面向架构师、开发工程师与系统管理员的。如果你对时序数据的基本概念、价值以及其所能带来的业务价值尚不了解,请参考[时序数据基础](./concept)。
|
TDengine 是一款 [开源](https://www.taosdata.com/tdengine/open_source_time-series_database)、[高性能](https://www.taosdata.com/fast)、[云原生](https://www.taosdata.com/tdengine/cloud_native_time-series_database) 的<a href="https://www.taosdata.com/" data-internallinksmanager029f6b8e52c="2" title="时序数据库" target="_blank" rel="noopener">时序数据库</a>(<a href="https://www.taosdata.com/time-series-database" data-internallinksmanager029f6b8e52c="9" title="Time Series DataBase" target="_blank" rel="noopener">Time Series Database</a>, <a href="https://www.taosdata.com/tsdb" data-internallinksmanager029f6b8e52c="8" title="TSDB" target="_blank" rel="noopener">TSDB</a>), 它专为物联网、车联网、工业互联网、金融、IT 运维等场景优化设计。同时它还带有内建的缓存、流式计算、数据订阅等系统功能,能大幅减少系统设计的复杂度,降低研发和运营成本,是一款极简的时序数据处理平台。本文档是 TDengine 的用户手册,主要是介绍 TDengine 的基本概念、安装、使用、功能、开发接口、运营维护、TDengine 内核设计等等,它主要是面向架构师、开发工程师与系统管理员的。如果你对时序数据的基本概念、价值以及其所能带来的业务价值尚不了解,请参考 [时序数据基础](./concept)。
|
||||||
|
|
||||||
TDengine 充分利用了时序数据的特点,提出了“一个数据采集点一张表”与“超级表”的概念,设计了创新的存储引擎,让数据的写入、查询和存储效率都得到极大的提升。为正确理解并使用 TDengine,无论你在工作中是什么角色,请您仔细阅读[数据模型](./basic/model)一章。
|
TDengine 充分利用了时序数据的特点,提出了“一个数据采集点一张表”与“超级表”的概念,设计了创新的存储引擎,让数据的写入、查询和存储效率都得到极大的提升。为正确理解并使用 TDengine,无论你在工作中是什么角色,请您仔细阅读 [数据模型](./basic/model) 一章。
|
||||||
|
|
||||||
如果你是开发工程师,请一定仔细阅读[开发指南](./develop)一章,该部分对数据库连接、建模、写入、查询、流式计算、缓存、数据订阅、用户自定义函数等功能都做了详细介绍,并配有各种编程语言的示例代码。大部分情况下,只要复制粘贴示例代码,针对自己的应用稍作改动,就能跑起来。对 REST API、各种编程语言的连接器(Connector)想做更多详细了解,请看[连接器](./reference/connector)一章。
|
如果你是开发工程师,请一定仔细阅读 [开发指南](./develop) 一章,该部分对数据库连接、建模、写入、查询、流式计算、缓存、数据订阅、用户自定义函数等功能都做了详细介绍,并配有各种编程语言的示例代码。大部分情况下,只要复制粘贴示例代码,针对自己的应用稍作改动,就能跑起来。对 REST API、各种编程语言的连接器(Connector)想做更多详细了解,请看 [连接器](./reference/connector) 一章。
|
||||||
|
|
||||||
我们已经生活在大数据时代,纵向扩展已经无法满足日益增长的业务需求,任何系统都必须具有水平扩展的能力,集群成为大数据以及 Database 系统的不可缺失功能。TDengine 团队不仅实现了集群功能,而且将这一重要核心功能开源。怎么部署、管理和维护 TDengine 集群,请仔细参考[运维管理](./operation)一章。
|
我们已经生活在大数据时代,纵向扩展已经无法满足日益增长的业务需求,任何系统都必须具有水平扩展的能力,集群成为大数据以及 Database 系统的不可缺失功能。TDengine 团队不仅实现了集群功能,而且将这一重要核心功能开源。怎么部署、管理和维护 TDengine 集群,请仔细参考 [运维管理](./operation) 一章。
|
||||||
|
|
||||||
TDengine 采用 SQL 作为查询语言,大大降低学习成本、降低迁移成本,但同时针对时序数据场景,又做了一些扩展,以支持插值、降采样、时间加权平均等操作。[SQL 手册](./reference/taos-sql)一章详细描述了 SQL 语法、详细列出了各种支持的命令和函数。
|
TDengine 采用 SQL 作为查询语言,大大降低学习成本、降低迁移成本,但同时针对时序数据场景,又做了一些扩展,以支持插值、降采样、时间加权平均等操作。[SQL 手册](./reference/taos-sql) 一章详细描述了 SQL 语法、详细列出了各种支持的命令和函数。
|
||||||
|
|
||||||
如果你是系统管理员,关心安装、升级、容错灾备、关心数据导入、导出、配置参数,如何监测 TDengine 是否健康运行,如何提升系统运行的性能,请仔细参考[运维指南](./operation)一章。
|
如果你是系统管理员,关心安装、升级、容错灾备、关心数据导入、导出、配置参数,如何监测 TDengine 是否健康运行,如何提升系统运行的性能,请仔细参考 [运维指南](./operation) 一章。
|
||||||
|
|
||||||
如果你对数据库内核设计感兴趣,或是开源爱好者,建议仔细阅读[技术内幕](./tdinternal)一章。该章从分布式架构到存储引擎、查询引擎、数据订阅,再到流计算引擎都做了详细阐述。建议对照文档,查看 TDengine 在 GitHub 的源代码,对 TDengine 的设计和编码做深入了解,更欢迎加入开源社区,贡献代码。
|
如果你对数据库内核设计感兴趣,或是开源爱好者,建议仔细阅读 [技术内幕](./tdinternal) 一章。该章从分布式架构到存储引擎、查询引擎、数据订阅,再到流计算引擎都做了详细阐述。建议对照文档,查看 TDengine 在 GitHub 的源代码,对 TDengine 的设计和编码做深入了解,更欢迎加入开源社区,贡献代码。
|
||||||
|
|
||||||
最后,作为一个开源软件,欢迎大家的参与。如果发现文档有任何错误、描述不清晰的地方,请在每个页面的最下方,点击“编辑本文档”直接进行修改。
|
最后,作为一个开源软件,欢迎大家的参与。如果发现文档有任何错误、描述不清晰的地方,请在每个页面的最下方,点击“编辑本文档”直接进行修改。
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ toc_max_heading_level: 4
|
||||||
|
|
||||||
TDengine 是一个高性能、分布式的时序数据库。通过集成的缓存、数据订阅、流计算和数据清洗与转换等功能,TDengine 已经发展成为一个专为物联网、工业互联网、金融和 IT 运维等关键行业量身定制的时序大数据平台。该平台能够高效地汇聚、存储、分析、计算和分发来自海量数据采集点的大规模数据流,每日处理能力可达 TB 乃至 PB 级别。借助 TDengine,企业可以实现实时的业务监控和预警,进而发掘出有价值的商业洞察。
|
TDengine 是一个高性能、分布式的时序数据库。通过集成的缓存、数据订阅、流计算和数据清洗与转换等功能,TDengine 已经发展成为一个专为物联网、工业互联网、金融和 IT 运维等关键行业量身定制的时序大数据平台。该平台能够高效地汇聚、存储、分析、计算和分发来自海量数据采集点的大规模数据流,每日处理能力可达 TB 乃至 PB 级别。借助 TDengine,企业可以实现实时的业务监控和预警,进而发掘出有价值的商业洞察。
|
||||||
|
|
||||||
自 2019 年 7 月 以来, 涛思数据陆续将 TDengine 的不同版本开源,包括单机版(2019 年 7 月)、集群版(2020 年 8 月)以及云原生版(2022 年 8 月)。开源之后,TDengine 迅速获得了全球开发者的关注,多次在 GitHub 网站全球趋势排行榜上位居榜首,最新的关注热度见[涛思数据首页](https://www.taosdata.com/)。
|
自 2019 年 7 月 以来, 涛思数据陆续将 TDengine 的不同版本开源,包括单机版(2019 年 7 月)、集群版(2020 年 8 月)以及云原生版(2022 年 8 月)。开源之后,TDengine 迅速获得了全球开发者的关注,多次在 GitHub 网站全球趋势排行榜上位居榜首,最新的关注热度见 [涛思数据首页](https://www.taosdata.com/)。
|
||||||
|
|
||||||
## TDengine 产品
|
## TDengine 产品
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ TDengine OSS 是一个开源的高性能时序数据库,与其他时序数据
|
||||||
|
|
||||||
在 TDengine OSS 的基础上,TDengine Enterprise 提供了增强的辅助功能,包括数据的备份恢复、异地容灾、多级存储、视图、权限控制、安全加密、IP 白名单、支持 MQTT、OPC-UA、OPC-DA、PI、Wonderware、Kafka 等各种数据源。这些功能为企业提供了更为全面、安全、可靠和高效的时序数据管理解决方案。更多的细节请看 [TDengine Enterprise](https://www.taosdata.com/tdengine-pro)。
|
在 TDengine OSS 的基础上,TDengine Enterprise 提供了增强的辅助功能,包括数据的备份恢复、异地容灾、多级存储、视图、权限控制、安全加密、IP 白名单、支持 MQTT、OPC-UA、OPC-DA、PI、Wonderware、Kafka 等各种数据源。这些功能为企业提供了更为全面、安全、可靠和高效的时序数据管理解决方案。更多的细节请看 [TDengine Enterprise](https://www.taosdata.com/tdengine-pro)。
|
||||||
|
|
||||||
此外,TDengine Cloud 作为一种全托管的云服务,存储与计算分离,分开计费,为企业提供了企业级的工具和服务,彻底解决了运维难题,尤其适合中小规模的用户使用。更多的细节请看[TDengine 云服务](https://cloud.taosdata.com/?utm_source=menu&utm_medium=webcn)
|
此外,TDengine Cloud 作为一种全托管的云服务,存储与计算分离,分开计费,为企业提供了企业级的工具和服务,彻底解决了运维难题,尤其适合中小规模的用户使用。更多的细节请看 [TDengine 云服务](https://cloud.taosdata.com/?utm_source=menu&utm_medium=webcn)。
|
||||||
|
|
||||||
## TDengine 主要功能与特性
|
## TDengine 主要功能与特性
|
||||||
|
|
||||||
|
|
|
@ -111,7 +111,7 @@ TDengine 还支持直接向超级表写入数据。需要注意的是,超级
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
insert into meters (tbname, ts, current, voltage, phase, location, group_id)
|
insert into meters (tbname, ts, current, voltage, phase, location, group_id)
|
||||||
values( "d1001, "2018-10-03 14:38:05", 10.2, 220, 0.23, "California.SanFrancisco", 2)
|
values("d1001", "2018-10-03 14:38:05", 10.2, 220, 0.23, "California.SanFrancisco", 2)
|
||||||
```
|
```
|
||||||
|
|
||||||
### 零代码写入
|
### 零代码写入
|
||||||
|
|
|
@ -154,8 +154,8 @@ let v3 = data["voltage"].split(",");
|
||||||
|
|
||||||
如下图所示
|
如下图所示
|
||||||
|
|
||||||
* 对字段`ts`使用 split 规则拆分成日期和时间。split 规则需要设置**分隔符**和**拆分数量**,拆分后的字段命名规则为`{原字段名}_{顺序号}`。
|
* 对字段 `ts` 使用 split 规则拆分成日期和时间。split 规则需要设置 **分隔符** 和 **拆分数量**,拆分后的字段命名规则为 `{原字段名}_{顺序号}`。
|
||||||
* 对字段`voltage`使用正则表达式 `^(?<voltage>[0-9]+)(?<voltage_unit>[a-zA-Z]+)$` 提取出电压值和电压单位,Regex 规则同解析过程中的一样,使用**命名捕获组**命名提取字段。
|
* 对字段 `voltage` 使用正则表达式 `^(?<voltage>[0-9]+)(?<voltage_unit>[a-zA-Z]+)$` 提取出电压值和电压单位,Regex 规则同解析过程中的一样,使用 **命名捕获组** 命名提取字段。
|
||||||
* 对字段 `location` 使用 convert 转换,填写一个 JSON map 对象,其中 key 为字段 `current` 的值,`value` 为转换后的值。如图,`location` 字段的值 `"beijing.chaoyang.datun"` 被转换为 `"beijing.chaoyang.datunludong"`。
|
* 对字段 `location` 使用 convert 转换,填写一个 JSON map 对象,其中 key 为字段 `current` 的值,`value` 为转换后的值。如图,`location` 字段的值 `"beijing.chaoyang.datun"` 被转换为 `"beijing.chaoyang.datunludong"`。
|
||||||
|
|
||||||

|

|
||||||
|
|
|
@ -7,7 +7,7 @@ toc_max_heading_level: 4
|
||||||
import Tabs from "@theme/Tabs";
|
import Tabs from "@theme/Tabs";
|
||||||
import TabItem from "@theme/TabItem";
|
import TabItem from "@theme/TabItem";
|
||||||
|
|
||||||
TDengine 对 SQL 语言提供了全面的支持,允许用户以熟悉的 SQL 语法进行数据的查询、插入和删除操作。 TDengine 的 SQL 还支持对数据库和数据表的管理操作,如创建、修改和删除数据库及数据表。TDengine 扩展了标准 SQL,引入了时序数据处理特有的功能,如时间序列数据的聚合查询、降采样、插值查询等,以适应时序数据的特点。这些扩展使得用户可以更高效地处理时间序列数据,进行复杂的数据分析和处理。 具体支持的 SQL 语法请参考 [TDengine SQL](../../reference/taos-sql/)
|
TDengine 对 SQL 语言提供了全面的支持,允许用户以熟悉的 SQL 语法进行数据的查询、插入和删除操作。TDengine 的 SQL 还支持对数据库和数据表的管理操作,如创建、修改和删除数据库及数据表。TDengine 扩展了标准 SQL,引入了时序数据处理特有的功能,如时间序列数据的聚合查询、降采样、插值查询等,以适应时序数据的特点。这些扩展使得用户可以更高效地处理时间序列数据,进行复杂的数据分析和处理。具体支持的 SQL 语法请参考 [TDengine SQL](../../reference/taos-sql/)
|
||||||
|
|
||||||
下面介绍使用各语言连接器通过执行 SQL 完成建库、建表、写入数据和查询数据。
|
下面介绍使用各语言连接器通过执行 SQL 完成建库、建表、写入数据和查询数据。
|
||||||
|
|
||||||
|
@ -108,7 +108,7 @@ curl --location -uroot:taosdata 'http://127.0.0.1:6041/rest/sql/power' \
|
||||||
```
|
```
|
||||||
|
|
||||||
**Note**
|
**Note**
|
||||||
NOW 为系统内部函数,默认为客户端所在计算机当前时间。 NOW + 1s 代表客户端当前时间往后加 1 秒,数字后面代表时间单位:a(毫秒),s(秒),m(分),h(小时),d(天),w(周),n(月),y(年)。
|
NOW 为系统内部函数,默认为客户端所在计算机当前时间。NOW + 1s 代表客户端当前时间往后加 1 秒,数字后面代表时间单位:a(毫秒),s(秒),m(分),h(小时),d(天),w(周),n(月),y(年)。
|
||||||
|
|
||||||
|
|
||||||
</TabItem>
|
</TabItem>
|
||||||
|
@ -160,7 +160,7 @@ NOW 为系统内部函数,默认为客户端所在计算机当前时间。 NOW
|
||||||
```
|
```
|
||||||
|
|
||||||
**Note**
|
**Note**
|
||||||
NOW 为系统内部函数,默认为客户端所在计算机当前时间。 NOW + 1s 代表客户端当前时间往后加 1 秒,数字后面代表时间单位:a(毫秒),s(秒),m(分),h(小时),d(天),w(周),n(月),y(年)。
|
NOW 为系统内部函数,默认为客户端所在计算机当前时间。NOW + 1s 代表客户端当前时间往后加 1 秒,数字后面代表时间单位:a(毫秒),s(秒),m(分),h(小时),d(天),w(周),n(月),y(年)。
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem label="REST API" value="rest">
|
<TabItem label="REST API" value="rest">
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@ import TabItem from "@theme/TabItem";
|
||||||
|
|
||||||
## 无模式写入行协议
|
## 无模式写入行协议
|
||||||
|
|
||||||
TDengine 的无模式写入行协议兼容 InfluxDB 的行协议、OpenTSDB 的 telnet 行协议和 OpenTSDB 的 JSON 格式协议。InfluxDB、OpenTSDB 的标准写入协议请参考各自的官方文档。
|
TDengine 的无模式写入行协议兼容 InfluxDB 的行协议、OpenTSDB 的 TELNET 行协议和 OpenTSDB 的 JSON 格式协议。InfluxDB、OpenTSDB 的标准写入协议请参考各自的官方文档。
|
||||||
|
|
||||||
下面首先以 InfluxDB 的行协议为基础,介绍 TDengine 扩展的协议内容。该协议允许用户采用更加精细的方式控制(超级表)模式。采用一个字符串来表达一个数据行,可以向写入 API 中一次传入多行字符串来实现多个数据行的批量写入,其格式约定如下。
|
下面首先以 InfluxDB 的行协议为基础,介绍 TDengine 扩展的协议内容。该协议允许用户采用更加精细的方式控制(超级表)模式。采用一个字符串来表达一个数据行,可以向写入 API 中一次传入多行字符串来实现多个数据行的批量写入,其格式约定如下。
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ tag_set 中的所有的数据自动转化为 nchar 数据类型,并不需要
|
||||||
在无模式写入数据行协议中,field_set 中的每个数据项都需要对自身的数据类型进行描述,具体要求如下。
|
在无模式写入数据行协议中,field_set 中的每个数据项都需要对自身的数据类型进行描述,具体要求如下。
|
||||||
- 如果两边有英文双引号,表示 varchar 类型,例如 "abc"。
|
- 如果两边有英文双引号,表示 varchar 类型,例如 "abc"。
|
||||||
- 如果两边有英文双引号而且带有 L 或 l 前缀,表示 nchar 类型,例如 L" 报错信息 "。
|
- 如果两边有英文双引号而且带有 L 或 l 前缀,表示 nchar 类型,例如 L" 报错信息 "。
|
||||||
- 如果两边有英文双引号而且带有 G 或 g 前缀, 表 示 geometry 类型, 例 如G"Point(4.343 89.342)"。
|
- 如果两边有英文双引号而且带有 G 或 g 前缀,表示 geometry 类型,例如 G"Point(4.343 89.342)"。
|
||||||
- 如果两边有英文双引号而且带有 B 或 b 前缀,表示 varbinary 类型,双引号内可以为 \x 开头的十六进制或者字符串,例如 B"\x98f46e" 和 B"hello"。
|
- 如果两边有英文双引号而且带有 B 或 b 前缀,表示 varbinary 类型,双引号内可以为 \x 开头的十六进制或者字符串,例如 B"\x98f46e" 和 B"hello"。
|
||||||
- 对于空格、等号(=)、逗号(,)、双引号(")、反斜杠(\),前面需要使用反斜杠(\)进行转义(均为英文半角符号)。无模式写入协议的域转义规则如下表所示。
|
- 对于空格、等号(=)、逗号(,)、双引号(")、反斜杠(\),前面需要使用反斜杠(\)进行转义(均为英文半角符号)。无模式写入协议的域转义规则如下表所示。
|
||||||
|
|
||||||
|
@ -48,7 +48,7 @@ tag_set 中的所有的数据自动转化为 nchar 数据类型,并不需要
|
||||||
| 4 | 列名 | 逗号,等号,空格 |
|
| 4 | 列名 | 逗号,等号,空格 |
|
||||||
| 5 | 列值 | 双引号,反斜杠 |
|
| 5 | 列值 | 双引号,反斜杠 |
|
||||||
|
|
||||||
如果使用两个连续的反斜杠,则第1个反斜杠作为转义符,当只有一个反斜杠时则无须转义。无模式写入协议的反斜杠转义规则如下表所示。
|
如果使用两个连续的反斜杠,则第 1 个反斜杠作为转义符,当只有一个反斜杠时则无须转义。无模式写入协议的反斜杠转义规则如下表所示。
|
||||||
|
|
||||||
| **序号** | **反斜杠** | **转义为** |
|
| **序号** | **反斜杠** | **转义为** |
|
||||||
| -------- | ------------ | ---------- |
|
| -------- | ------------ | ---------- |
|
||||||
|
@ -70,10 +70,9 @@ tag_set 中的所有的数据自动转化为 nchar 数据类型,并不需要
|
||||||
| 5 | i32/u32 | Int/UInt | 4 |
|
| 5 | i32/u32 | Int/UInt | 4 |
|
||||||
| 6 | i64/i/u64/u | BigInt/BigInt/UBigInt/UBigInt | 8 |
|
| 6 | i64/i/u64/u | BigInt/BigInt/UBigInt/UBigInt | 8 |
|
||||||
|
|
||||||
- t, T, true, True, TRUE, f, F, false, False 将直接作为 BOOL 型来处理。
|
- t、T、true、True、TRUE、f、F、false、False 将直接作为 BOOL 型来处理。
|
||||||
|
|
||||||
例如如下数据行表示:向名为 st 的超级表下的 t1 标签为 "3"(NCHAR)、t2 标签为 "4"(NCHAR)、t3
|
例如如下数据行表示:向名为 st 的超级表下的 t1 标签为 "3"(NCHAR)、t2 标签为 "4"(NCHAR)、t3 标签为 "t3"(NCHAR)的数据子表,写入 c1 列为 3(BIGINT)、c2 列为 false(BOOL)、c3
|
||||||
标签为 "t3"(NCHAR)的数据子表,写入 c1 列为 3(BIGINT)、c2 列为 false(BOOL)、c3
|
|
||||||
列为 "passit"(BINARY)、c4 列为 4(DOUBLE)、主键时间戳为 1626006833639000000 的一行数据。
|
列为 "passit"(BINARY)、c4 列为 4(DOUBLE)、主键时间戳为 1626006833639000000 的一行数据。
|
||||||
|
|
||||||
```json
|
```json
|
||||||
|
@ -94,30 +93,28 @@ TDengine 提供数据写入的幂等性保证,即您可以反复调用 API 进
|
||||||
"measurement,tag_key1=tag_value1,tag_key2=tag_value2"
|
"measurement,tag_key1=tag_value1,tag_key2=tag_value2"
|
||||||
```
|
```
|
||||||
|
|
||||||
- 需要注意的是,这里的 tag_key1, tag_key2 并不是用户输入的标签的原始顺序,而是使用了标签名称按照字符串升序排列后的结果。所以,tag_key1 并不是在行协议中输入的第一个标签。
|
- 需要注意的是,这里的 tag_key1、tag_key2 并不是用户输入的标签的原始顺序,而是使用了标签名称按照字符串升序排列后的结果。所以,tag_key1 并不是在行协议中输入的第一个标签。
|
||||||
排列完成以后计算该字符串的 MD5 散列值 "md5_val"。然后将计算的结果与字符串组合生成表名:“t_md5_val”。其中的 “t_” 是固定的前缀,每个通过该映射关系自动生成的表都具有该前缀。
|
排列完成以后计算该字符串的 MD5 散列值 "md5_val"。然后将计算的结果与字符串组合生成表名:"t_md5_val"。其中的 "t_" 是固定的前缀,每个通过该映射关系自动生成的表都具有该前缀。
|
||||||
|
|
||||||
- 如果不想用自动生成的表名,有两种指定子表名的方式(第一种优先级更高)。
|
- 如果不想用自动生成的表名,有两种指定子表名的方式(第一种优先级更高)。
|
||||||
1. 通过在taos.cfg里配置 smlAutoChildTableNameDelimiter 参数来指定(`@ # 空格 回车 换行 制表符`除外)。
|
- 通过在 taos.cfg 里配置 smlAutoChildTableNameDelimiter 参数来指定(`@ # 空格 回车 换行 制表符` 除外),例如配置 smlAutoChildTableNameDelimiter=- 插入数据为 st,t0=cpu1,t1=4 c1=3 1626006833639000000 则创建的表名为 cpu1-4。
|
||||||
1. 举例如下:配置 smlAutoChildTableNameDelimiter=- 插入数据为 st,t0=cpu1,t1=4 c1=3 1626006833639000000 则创建的表名为 cpu1-4。
|
- 通过在 taos.cfg 里配置 smlChildTableName 参数来指定,例如配置 smlChildTableName=tname 插入数据为 st,tname=cpu1,t1=4 c1=3 1626006833639000000 则创建的表名为 cpu1,注意如果多行数据 tname 相同,但是后面的 tag_set 不同,则使用第一行自动建表时指定的 tag_set,其他的行会忽略。
|
||||||
2. 通过在taos.cfg里配置 smlChildTableName 参数来指定。
|
|
||||||
1. 举例如下:配置 smlChildTableName=tname 插入数据为 st,tname=cpu1,t1=4 c1=3 1626006833639000000 则创建的表名为 cpu1,注意如果多行数据 tname 相同,但是后面的 tag_set 不同,则使用第一行自动建表时指定的 tag_set,其他的行会忽略。
|
|
||||||
|
|
||||||
2. 如果解析行协议获得的超级表不存在,则会创建这个超级表(不建议手动创建超级表,不然插入数据可能异常)。
|
2. 如果解析行协议获得的超级表不存在,则会创建这个超级表(不建议手动创建超级表,不然插入数据可能异常)。
|
||||||
3. 如果解析行协议获得子表不存在,则 Schemaless 会按照步骤 1 或 2 确定的子表名来创建子表。
|
3. 如果解析行协议获得子表不存在,则 schemaless 会按照步骤 1 或 2 确定的子表名来创建子表。
|
||||||
4. 如果数据行中指定的标签列或普通列不存在,则在超级表中增加对应的标签列或普通列(只增不减)。
|
4. 如果数据行中指定的标签列或普通列不存在,则在超级表中增加对应的标签列或普通列(只增不减)。
|
||||||
5. 如果超级表中存在一些标签列或普通列未在一个数据行中被指定取值,那么这些列的值在这一行中会被置为 NULL。
|
5. 如果超级表中存在一些标签列或普通列未在一个数据行中被指定取值,那么这些列的值在这一行中会被置为 NULL。
|
||||||
6. 对 BINARY 或 NCHAR 列,如果数据行中所提供值的长度超出了列类型的限制,自动增加该列允许存储的字符长度上限(只增不减),以保证数据的完整保存。
|
6. 对 BINARY 或 NCHAR 列,如果数据行中所提供值的长度超出了列类型的限制,自动增加该列允许存储的字符长度上限(只增不减),以保证数据的完整保存。
|
||||||
7. 整个处理过程中遇到的错误会中断写入过程,并返回错误代码。
|
7. 整个处理过程中遇到的错误会中断写入过程,并返回错误代码。
|
||||||
8. 为了提高写入的效率,默认假设同一个超级表中 field_set 的顺序是一样的(第一条数据包含所有的 field,后面的数据按照这个顺序),如果顺序不一样,需要配置参数 smlDataFormat 为 false,否则,数据写入按照相同顺序写入,库中数据会异常,从3.0.3.0开始,自动检测顺序是否一致,该配置废弃。
|
8. 为了提高写入的效率,默认假设同一个超级表中 field_set 的顺序是一样的(第一条数据包含所有的 field,后面的数据按照这个顺序),如果顺序不一样,需要配置参数 smlDataFormat 为 false,否则,数据写入按照相同顺序写入,库中数据会异常,从 3.0.3.0 开始,自动检测顺序是否一致,该配置废弃。
|
||||||
9. 由于sql建表表名不支持点号(.),所以schemaless也对点号(.)做了处理,如果schemaless自动建表的表名如果有点号(.),会自动替换为下划线(\_)。如果手动指定子表名的话,子表名里有点号(.),同样转化为下划线(\_)。
|
9. 由于 sql 建表表名不支持点号(.),所以 schemaless 也对点号(.)做了处理,如果 schemaless 自动建表的表名如果有点号(.),会自动替换为下划线(\_)。如果手动指定子表名的话,子表名里有点号(.),同样转化为下划线(\_)。
|
||||||
10. taos.cfg 增加 smlTsDefaultName 配置(值为字符串),只在client端起作用,配置后,schemaless自动建表的时间列名字可以通过该配置设置。不配置的话,默认为 _ts。
|
10. taos.cfg 增加 smlTsDefaultName 配置(字符串类型),只在 client 端起作用,配置后,schemaless 自动建表的时间列名字可以通过该配置设置。不配置的话,默认为 _ts。
|
||||||
11. 无模式写入的数据超级表或子表名区分大小写。
|
11. 无模式写入的数据超级表或子表名区分大小写。
|
||||||
12. 无模式写入仍然遵循 TDengine 对数据结构的底层限制,例如每行数据的总长度不能超过 48KB(从 3.0.5.0 版本开始为 64KB),标签值的总长度不超过16KB。
|
12. 无模式写入仍然遵循 TDengine 对数据结构的底层限制,例如每行数据的总长度不能超过 48KB(从 3.0.5.0 版本开始为 64KB),标签值的总长度不超过 16KB。
|
||||||
|
|
||||||
## 时间分辨率识别
|
## 时间分辨率识别
|
||||||
|
|
||||||
无模式写入支持3个指定的模式,如下表所示:
|
无模式写入支持 3 个指定的模式,如下表所示:
|
||||||
|
|
||||||
| **序号** | **值** | **说明** |
|
| **序号** | **值** | **说明** |
|
||||||
| -------- | ------------------- | ------------------------------- |
|
| -------- | ------------------- | ------------------------------- |
|
||||||
|
@ -141,13 +138,13 @@ TDengine 提供数据写入的幂等性保证,即您可以反复调用 API 进
|
||||||
|
|
||||||
## 数据模式映射规则
|
## 数据模式映射规则
|
||||||
|
|
||||||
InfluxDB行协议的数据将被映射成具有模式的数据,其中,measurement映射为超级表名称,tag_set中的标签名称映射为数据模式中的标签名,field_set中的名称映射为列名称。例如下面的数据。
|
InfluxDB 行协议的数据将被映射成具有模式的数据,其中,measurement 映射为超级表名称,tag_set 中的标签名称映射为数据模式中的标签名,field_set 中的名称映射为列名称。例如下面的数据。
|
||||||
|
|
||||||
```json
|
```json
|
||||||
st,t1=3,t2=4,t3=t3 c1=3i64,c3="passit",c2=false,c4=4f64 1626006833639000000
|
st,t1=3,t2=4,t3=t3 c1=3i64,c3="passit",c2=false,c4=4f64 1626006833639000000
|
||||||
```
|
```
|
||||||
|
|
||||||
该行数据映射生成一个超级表: st, 其包含了 3 个类型为 nchar 的标签,分别是:t1, t2, t3。五个数据列,分别是 ts(timestamp),c1 (bigint),c3(binary),c2 (bool), c4 (bigint)。映射成为如下 SQL 语句:
|
该行数据映射生成一个超级表:st, 其包含了 3 个类型为 nchar 的标签,分别是:t1、t2、t3。五个数据列,分别是 ts(timestamp)、c1 (bigint)、c3(binary)、c2 (bool)、c4 (bigint)。映射成为如下 SQL 语句:
|
||||||
|
|
||||||
```json
|
```json
|
||||||
create stable st (_ts timestamp, c1 bigint, c2 bool, c3 binary(6), c4 bigint) tags(t1 nchar(1), t2 nchar(1), t3 nchar(2))
|
create stable st (_ts timestamp, c1 bigint, c2 bool, c3 binary(6), c4 bigint) tags(t1 nchar(1), t2 nchar(1), t3 nchar(2))
|
||||||
|
@ -164,7 +161,7 @@ st,t1=3,t2=4,t3=t3 c1=3i64,c3="passit",c2=false,c4=4 1626006833639000000
|
||||||
st,t1=3,t2=4,t3=t3 c1=3i64,c3="passit",c2=false,c4=4i 1626006833640000000
|
st,t1=3,t2=4,t3=t3 c1=3i64,c3="passit",c2=false,c4=4i 1626006833640000000
|
||||||
```
|
```
|
||||||
|
|
||||||
第一行的数据类型映射将 c4 列定义为 Double, 但是第二行的数据又通过数值后缀方式声明该列为 BigInt, 由此会触发无模式写入的解析错误。
|
第一行的数据类型映射将 c4 列定义为 Double, 但是第二行的数据又通过数值后缀方式声明该列为 bigInt, 由此会触发无模式写入的解析错误。
|
||||||
|
|
||||||
如果列前面的行协议将数据列声明为了 binary, 后续的要求长度更长的 binary 长度,此时会触发超级表模式的变更。
|
如果列前面的行协议将数据列声明为了 binary, 后续的要求长度更长的 binary 长度,此时会触发超级表模式的变更。
|
||||||
|
|
||||||
|
@ -299,7 +296,7 @@ writer.write(lineDemo, SchemalessProtocolType.LINE, SchemalessTimestampType.NANO
|
||||||
|
|
||||||
## 查询写入的数据
|
## 查询写入的数据
|
||||||
|
|
||||||
运行上节的样例代码,会在 power 数据库l中自动建表,我们可以通过 TDengine CLI 或者应用程序来查询数据。下面给出用 TDengine CLI 查询超级表和 meters 表数据的样例。
|
运行上节的样例代码,会在 power 数据库中自动建表,我们可以通过 TDengine CLI 或者应用程序来查询数据。下面给出用 TDengine CLI 查询超级表和 meters 表数据的样例。
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
taos> show power.stables;
|
taos> show power.stables;
|
||||||
|
|
|
@ -7,7 +7,7 @@ toc_max_heading_level: 4
|
||||||
import Tabs from "@theme/Tabs";
|
import Tabs from "@theme/Tabs";
|
||||||
import TabItem from "@theme/TabItem";
|
import TabItem from "@theme/TabItem";
|
||||||
|
|
||||||
通过参数绑定方式写入数据时,能避免SQL语法解析的资源消耗,从而显著提升写入性能。参数绑定能提高写入效率的原因主要有以下几点:
|
通过参数绑定方式写入数据时,能避免 SQL 语法解析的资源消耗,从而显著提升写入性能。参数绑定能提高写入效率的原因主要有以下几点:
|
||||||
|
|
||||||
- 减少解析时间:通过参数绑定,SQL 语句的结构在第一次执行时就已经确定,后续的执行只需要替换参数值,这样可以避免每次执行时都进行语法解析,从而减少解析时间。
|
- 减少解析时间:通过参数绑定,SQL 语句的结构在第一次执行时就已经确定,后续的执行只需要替换参数值,这样可以避免每次执行时都进行语法解析,从而减少解析时间。
|
||||||
- 预编译:当使用参数绑定时,SQL 语句可以被预编译并缓存,后续使用不同的参数值执行时,可以直接使用预编译的版本,提高执行效率。
|
- 预编译:当使用参数绑定时,SQL 语句可以被预编译并缓存,后续使用不同的参数值执行时,可以直接使用预编译的版本,提高执行效率。
|
||||||
|
@ -19,9 +19,9 @@ import TabItem from "@theme/TabItem";
|
||||||
我们只推荐使用下面两种形式的 SQL 进行参数绑定写入:
|
我们只推荐使用下面两种形式的 SQL 进行参数绑定写入:
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
一、确定子表存在:
|
一、确定子表存在
|
||||||
1. INSERT INTO meters (tbname, ts, current, voltage, phase) VALUES(?, ?, ?, ?, ?)
|
1. INSERT INTO meters (tbname, ts, current, voltage, phase) VALUES(?, ?, ?, ?, ?)
|
||||||
二、自动建表:
|
二、自动建表
|
||||||
1. INSERT INTO meters (tbname, ts, current, voltage, phase, location, group_id) VALUES(?, ?, ?, ?, ?, ?, ?)
|
1. INSERT INTO meters (tbname, ts, current, voltage, phase, location, group_id) VALUES(?, ?, ?, ?, ?, ?, ?)
|
||||||
2. INSERT INTO ? USING meters TAGS (?, ?) VALUES (?, ?, ?, ?)
|
2. INSERT INTO ? USING meters TAGS (?, ?) VALUES (?, ?, ?, ?)
|
||||||
```
|
```
|
||||||
|
@ -50,7 +50,7 @@ import TabItem from "@theme/TabItem";
|
||||||
{{#include docs/examples/java/src/main/java/com/taos/example/WSParameterBindingExtendInterfaceDemo.java:para_bind}}
|
{{#include docs/examples/java/src/main/java/com/taos/example/WSParameterBindingExtendInterfaceDemo.java:para_bind}}
|
||||||
```
|
```
|
||||||
|
|
||||||
这是一个[更详细的参数绑定示例](https://github.com/taosdata/TDengine/blob/main/docs/examples/java/src/main/java/com/taos/example/WSParameterBindingFullDemo.java)
|
这是一个 [更详细的参数绑定示例](https://github.com/taosdata/TDengine/blob/main/docs/examples/java/src/main/java/com/taos/example/WSParameterBindingFullDemo.java)
|
||||||
|
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem label="Python" value="python">
|
<TabItem label="Python" value="python">
|
||||||
|
@ -100,7 +100,7 @@ import TabItem from "@theme/TabItem";
|
||||||
{{#include docs/examples/java/src/main/java/com/taos/example/ParameterBindingBasicDemo.java:para_bind}}
|
{{#include docs/examples/java/src/main/java/com/taos/example/ParameterBindingBasicDemo.java:para_bind}}
|
||||||
```
|
```
|
||||||
|
|
||||||
这是一个[更详细的参数绑定示例](https://github.com/taosdata/TDengine/blob/main/docs/examples/java/src/main/java/com/taos/example/ParameterBindingFullDemo.java)
|
这是一个 [更详细的参数绑定示例](https://github.com/taosdata/TDengine/blob/main/docs/examples/java/src/main/java/com/taos/example/ParameterBindingFullDemo.java)
|
||||||
|
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem label="Python" value="python">
|
<TabItem label="Python" value="python">
|
||||||
|
|
|
@ -10,13 +10,13 @@ import TabItem from "@theme/TabItem";
|
||||||
TDengine 提供了类似于消息队列产品的数据订阅和消费接口。在许多场景中,采用 TDengine 的时序大数据平台,无须再集成消息队列产品,从而简化应用程序设计并降低运维成本。本章介绍各语言连接器数据订阅的相关 API 以及使用方法。 数据订阅的基础知识请参考 [数据订阅](../../advanced/subscription/)
|
TDengine 提供了类似于消息队列产品的数据订阅和消费接口。在许多场景中,采用 TDengine 的时序大数据平台,无须再集成消息队列产品,从而简化应用程序设计并降低运维成本。本章介绍各语言连接器数据订阅的相关 API 以及使用方法。 数据订阅的基础知识请参考 [数据订阅](../../advanced/subscription/)
|
||||||
|
|
||||||
## 创建主题
|
## 创建主题
|
||||||
请用 TDengine CLI 或者 参考 [执行 SQL](../sql/) 章节用程序执行创建主题的 SQL:`CREATE TOPIC IF NOT EXISTS topic_meters AS SELECT ts, current, voltage, phase, groupid, location FROM meters`
|
请用 TDengine CLI 或者参考 [执行 SQL](../sql/) 章节用程序执行创建主题的 SQL:`CREATE TOPIC IF NOT EXISTS topic_meters AS SELECT ts, current, voltage, phase, groupid, location FROM meters`
|
||||||
|
|
||||||
上述 SQL 将创建一个名为 topic_meters 的订阅。使用该订阅所获取的消息中的每条记录都由此查询语句 `SELECT ts, current, voltage, phase, groupid, location FROM meters` 所选择的列组成。
|
上述 SQL 将创建一个名为 topic_meters 的订阅。使用该订阅所获取的消息中的每条记录都由此查询语句 `SELECT ts, current, voltage, phase, groupid, location FROM meters` 所选择的列组成。
|
||||||
|
|
||||||
**注意**
|
**注意**
|
||||||
在 TDengine 连接器实现中,对于订阅查询,有以下限制。
|
在 TDengine 连接器实现中,对于订阅查询,有以下限制。
|
||||||
- 查询语句限制:订阅查询只能使用 select 语句,并不支持其他类型的SQL,如订阅库,订阅超级表(非 select 方式),insert、update 或 delete 等。
|
- 查询语句限制:订阅查询只能使用 select 语句,并不支持其他类型的 SQL,如订阅库、订阅超级表(非 select 方式)、insert、update 或 delete 等。
|
||||||
- 原始始数据查询:订阅查询只能查询原始数据,而不能查询聚合或计算结果。
|
- 原始始数据查询:订阅查询只能查询原始数据,而不能查询聚合或计算结果。
|
||||||
- 时间顺序限制:订阅查询只能按照时间正序查询数据。
|
- 时间顺序限制:订阅查询只能按照时间正序查询数据。
|
||||||
|
|
||||||
|
@ -28,25 +28,82 @@ TDengine 消费者的概念跟 Kafka 类似,消费者通过订阅主题来接
|
||||||
### 创建参数
|
### 创建参数
|
||||||
创建消费者的参数较多,非常灵活的支持了各种连接类型、 Offset 提交方式、压缩、重连、反序列化等特性。各语言连接器都适用的通用基础配置项如下表所示:
|
创建消费者的参数较多,非常灵活的支持了各种连接类型、 Offset 提交方式、压缩、重连、反序列化等特性。各语言连接器都适用的通用基础配置项如下表所示:
|
||||||
|
|
||||||
| 参数名称 | 类型 | 参数说明 | 备注 |
|
#### td.connect.ip
|
||||||
| :-----------------------: | :-----: | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
- 说明:服务端的 FQDN
|
||||||
| `td.connect.ip` | string | 服务端的 FQDN | 可以是ip或者host name |
|
- 类型:string
|
||||||
| `td.connect.user` | string | 用户名 | |
|
- 备注:可以是 ip 或者 host name
|
||||||
| `td.connect.pass` | string | 密码 | |
|
|
||||||
| `td.connect.port` | integer | 服务端的端口号 | |
|
|
||||||
| `group.id` | string | 消费组 ID,同一消费组共享消费进度 | <br />**必填项**。最大长度:192,超长将截断。<br />每个topic最多可建立 100 个 consumer group |
|
|
||||||
| `client.id` | string | 客户端 ID | 最大长度:255,超长将截断。 |
|
|
||||||
| `auto.offset.reset` | enum | 消费组订阅的初始位置 | <br />`earliest`: default(version < 3.2.0.0);从头开始订阅; <br/>`latest`: default(version >= 3.2.0.0);仅从最新数据开始订阅; <br/>`none`: 没有提交的 offset 无法订阅 |
|
|
||||||
| `enable.auto.commit` | boolean | 是否启用消费位点自动提交,true: 自动提交,客户端应用无需commit;false:客户端应用需要自行commit | 默认值为 true |
|
|
||||||
| `auto.commit.interval.ms` | integer | 消费记录自动提交消费位点时间间隔,单位为毫秒 | 默认值为 5000 |
|
|
||||||
| `msg.with.table.name` | boolean | 是否允许从消息中解析表名, 不适用于列订阅(列订阅时可将 tbname 作为列写入 subquery 语句)(从 3.2.0.0 版本该参数废弃,恒为 true) | 默认关闭 |
|
|
||||||
| `enable.replay` | boolean | 是否开启数据回放功能 | 默认关闭 |
|
|
||||||
| `session.timeout.ms` | integer | consumer 心跳丢失后超时时间,超时后会触发 rebalance 逻辑,成功后该 consumer 会被删除(从 3.3.3.0 版本开始支持) | 默认值为 12000,取值范围 [6000, 1800000] |
|
|
||||||
| `max.poll.interval.ms` | integer | consumer poll 拉取数据间隔的最长时间,超过该时间,会认为该 consumer 离线,触发 rebalance 逻辑,成功后该 consumer 会被删除(从 3.3.3.0 版本开始支持) | 默认值为 300000,[1000,INT32_MAX] |
|
|
||||||
| `fetch.max.wait.ms` | integer | 服务端单次返回数据的最大耗时(从 3.3.6.0 版本开始支持) | 默认值为 1000,[1,INT32_MAX] |
|
|
||||||
| `min.poll.rows` | integer | 服务端单次返回数据的最小条数(从 3.3.6.0 版本开始支持) | 默认值为 4096,[1,INT32_MAX] |
|
|
||||||
| `msg.consume.rawdata` | integer | 消费数据时拉取数据类型为二进制类型,不可做解析操作,内部参数,只用于 taosX 数据迁移(从 3.3.6.0 版本开始支持) | 默认值为 0 表示不起效, 非 0 为 起效 |
|
|
||||||
|
|
||||||
|
#### td.connect.user
|
||||||
|
- 说明:用户名
|
||||||
|
- 类型:string
|
||||||
|
|
||||||
|
#### td.connect.pass
|
||||||
|
- 说明:密码
|
||||||
|
- 类型:string
|
||||||
|
|
||||||
|
#### td.connect.port
|
||||||
|
- 说明:服务端的端口号
|
||||||
|
- 类型:integer
|
||||||
|
|
||||||
|
#### group.id
|
||||||
|
- 说明:消费组 ID,同一消费组共享消费进度
|
||||||
|
- 类型:string
|
||||||
|
- 备注:**必填项**。最大长度:192,超长将截断。<br />每个topic最多可建立 100 个 consumer group
|
||||||
|
|
||||||
|
#### client.id
|
||||||
|
- 说明:客户端 ID
|
||||||
|
- 类型:string
|
||||||
|
- 备注:最大长度 255,超长将截断
|
||||||
|
|
||||||
|
#### auto.offset.reset
|
||||||
|
- 说明:消费组订阅的初始位置
|
||||||
|
- 类型:enum
|
||||||
|
- 备注:<br />`earliest`:default(version < 3.2.0.0),从头开始订阅;<br/>`latest`:default(version >= 3.2.0.0),仅从最新数据开始订阅;<br/>`none`:没有提交的 offset 无法订阅。
|
||||||
|
|
||||||
|
#### enable.auto.commit
|
||||||
|
- 说明:是否启用消费位点自动提交
|
||||||
|
- 类型:boolean
|
||||||
|
- 备注:true:自动提交,客户端应用无需 commit;false:客户端应用需要自行 commit;默认值为 true。
|
||||||
|
|
||||||
|
#### auto.commit.interval.ms
|
||||||
|
- 说明:消费记录自动提交消费位点时间间隔
|
||||||
|
- 类型:integer
|
||||||
|
- 备注:单位为毫秒,默认值为 5000
|
||||||
|
|
||||||
|
#### msg.with.table.name
|
||||||
|
- 说明:是否允许从消息中解析表名
|
||||||
|
- 类型:boolean
|
||||||
|
- 备注:不适用于列订阅(列订阅时可将 tbname 作为列写入 subquery 语句),默认关闭。v3.2.0.0 该参数废弃。
|
||||||
|
|
||||||
|
#### enable.replay
|
||||||
|
- 说明:是否开启数据回放功能
|
||||||
|
- 类型:boolean
|
||||||
|
- 备注:默认关闭
|
||||||
|
|
||||||
|
#### session.timeout.ms
|
||||||
|
- 说明:consumer 心跳丢失后超时时间
|
||||||
|
- 类型:integer
|
||||||
|
- 备注:超时后会触发 rebalance 逻辑,成功后该 consumer 会被删除。默认值为 12000,取值范围 [6000,1800000]。v3.3.3.0 开始支持)
|
||||||
|
|
||||||
|
#### max.poll.interval.ms
|
||||||
|
- 说明:consumer poll 拉取数据间隔的最长时间
|
||||||
|
- 类型:integer
|
||||||
|
- 备注:超过该时间,会认为该 consumer 离线,触发 rebalance 逻辑,成功后该 consumer 会被删除。默认值为 300000,[1000,INT32_MAX]。v3.3.3.0 开始支持。
|
||||||
|
|
||||||
|
#### fetch.max.wait.ms
|
||||||
|
- 说明:服务端单次返回数据的最大耗时
|
||||||
|
- 类型:integer
|
||||||
|
- 备注:默认值为 1000,[1,INT32_MAX]。v3.3.6.0 开始支持。
|
||||||
|
|
||||||
|
#### min.poll.rows
|
||||||
|
- 说明:服务端单次返回数据的最小条数
|
||||||
|
- 类型:integer
|
||||||
|
- 备注:默认值为 4096,[1,INT32_MAX]。v3.3.6.0 开始支持。
|
||||||
|
|
||||||
|
#### msg.consume.rawdata
|
||||||
|
- 说明:消费数据时拉取数据类型为二进制类型,不可做解析操作 `内部参数,只用于 taosX 数据迁移`
|
||||||
|
- 类型:integer
|
||||||
|
- 备注:默认值为 0 表示不起效,非 0 为起效。v3.3.6.0 开始支持。
|
||||||
|
|
||||||
下面是各语言连接器创建参数:
|
下面是各语言连接器创建参数:
|
||||||
<Tabs defaultValue="java" groupId="lang">
|
<Tabs defaultValue="java" groupId="lang">
|
||||||
|
|
|
@ -107,7 +107,7 @@ int32_t scalarfn_destroy() {
|
||||||
```
|
```
|
||||||
### 聚合函数模板
|
### 聚合函数模板
|
||||||
|
|
||||||
用C语言开发聚合函数的模板如下。
|
用 C 语言开发聚合函数的模板如下。
|
||||||
```c
|
```c
|
||||||
#include "taos.h"
|
#include "taos.h"
|
||||||
#include "taoserror.h"
|
#include "taoserror.h"
|
||||||
|
@ -292,13 +292,13 @@ select max_vol(vol1, vol2, vol3, deviceid) from battery;
|
||||||
### 准备环境
|
### 准备环境
|
||||||
|
|
||||||
准备环境的具体步骤如下:
|
准备环境的具体步骤如下:
|
||||||
- 第1步,准备好 Python 运行环境。
|
- 第 1 步,准备好 Python 运行环境。
|
||||||
- 第2步,安装 Python 包 taospyudf。命令如下。
|
- 第 2 步,安装 Python 包 taospyudf。命令如下。
|
||||||
```shell
|
```shell
|
||||||
pip3 install taospyudf
|
pip3 install taospyudf
|
||||||
```
|
```
|
||||||
- 第3步,执行命令 ldconfig。
|
- 第 3 步,执行命令 ldconfig。
|
||||||
- 第4步,启动 taosd 服务。
|
- 第 4 步,启动 taosd 服务。
|
||||||
|
|
||||||
安装过程中会编译 C++ 源码,因此系统上要有 cmake 和 gcc。编译生成的 libtaospyudf.so 文件自动会被复制到 /usr/local/lib/ 目录,因此如果是非 root 用户,安装时需加 sudo。安装完可以检查这个目录是否有了这个文件:
|
安装过程中会编译 C++ 源码,因此系统上要有 cmake 和 gcc。编译生成的 libtaospyudf.so 文件自动会被复制到 /usr/local/lib/ 目录,因此如果是非 root 用户,安装时需加 sudo。安装完可以检查这个目录是否有了这个文件:
|
||||||
|
|
||||||
|
@ -323,7 +323,7 @@ def process(input: datablock) -> tuple[output_type]:
|
||||||
```
|
```
|
||||||
|
|
||||||
主要参数说明如下:
|
主要参数说明如下:
|
||||||
- input:datablock 类似二维矩阵,通过成员方法 data(row, col) 读取位于 row 行、col 列的 python 对象
|
- input:datablock 类似二维矩阵,通过成员方法 data(row, col) 读取位于 row 行、col 列的 Python 对象
|
||||||
- 返回值是一个 Python 对象元组,每个元素类型为输出类型。
|
- 返回值是一个 Python 对象元组,每个元素类型为输出类型。
|
||||||
|
|
||||||
#### 聚合函数接口
|
#### 聚合函数接口
|
||||||
|
@ -389,7 +389,7 @@ def finish(buf: bytes) -> output_type:
|
||||||
|
|
||||||
### 数据类型映射
|
### 数据类型映射
|
||||||
|
|
||||||
下表描述了TDengine SQL 数据类型和 Python 数据类型的映射。任何类型的 NULL 值都映射成 Python 的 None 值。
|
下表描述了 TDengine SQL 数据类型和 Python 数据类型的映射。任何类型的 NULL 值都映射成 Python 的 None 值。
|
||||||
|
|
||||||
| **TDengine SQL数据类型** | **Python数据类型** |
|
| **TDengine SQL数据类型** | **Python数据类型** |
|
||||||
| :-----------------------: | ------------ |
|
| :-----------------------: | ------------ |
|
||||||
|
@ -405,7 +405,7 @@ def finish(buf: bytes) -> output_type:
|
||||||
|
|
||||||
本文内容由浅入深包括 5 个示例程序,同时也包含大量实用的 debug 技巧。
|
本文内容由浅入深包括 5 个示例程序,同时也包含大量实用的 debug 技巧。
|
||||||
|
|
||||||
注意:**UDF 内无法通过 print 函数输出日志,需要自己写文件或用 python 内置的 logging 库写文件**。
|
注意:**UDF 内无法通过 print 函数输出日志,需要自己写文件或用 Python 内置的 logging 库写文件**。
|
||||||
|
|
||||||
#### 示例一
|
#### 示例一
|
||||||
|
|
||||||
|
@ -652,7 +652,7 @@ tail -20 taospyudf.log
|
||||||
2023-05-25 11:42:34.541 ERROR [1679419] [PyUdf::PyUdf@217] py udf load module failure. error ModuleNotFoundError: No module named 'moment'
|
2023-05-25 11:42:34.541 ERROR [1679419] [PyUdf::PyUdf@217] py udf load module failure. error ModuleNotFoundError: No module named 'moment'
|
||||||
```
|
```
|
||||||
|
|
||||||
这是因为 “moment” 所在位置不在 python udf 插件默认的库搜索路径中。怎么确认这一点呢?通过以下命令搜索 taospyudf.log。
|
这是因为 “moment” 所在位置不在 Python udf 插件默认的库搜索路径中。怎么确认这一点呢?通过以下命令搜索 taospyudf.log。
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
grep 'sys path' taospyudf.log | tail -1
|
grep 'sys path' taospyudf.log | tail -1
|
||||||
|
@ -664,7 +664,7 @@ grep 'sys path' taospyudf.log | tail -1
|
||||||
2023-05-25 10:58:48.554 INFO [1679419] [doPyOpen@592] python sys path: ['', '/lib/python38.zip', '/lib/python3.8', '/lib/python3.8/lib-dynload', '/lib/python3/dist-packages', '/var/lib/taos//.udf']
|
2023-05-25 10:58:48.554 INFO [1679419] [doPyOpen@592] python sys path: ['', '/lib/python38.zip', '/lib/python3.8', '/lib/python3.8/lib-dynload', '/lib/python3/dist-packages', '/var/lib/taos//.udf']
|
||||||
```
|
```
|
||||||
|
|
||||||
发现 python udf 插件默认搜索的第三方库安装路径是: /lib/python3/dist-packages,而 moment 默认安装到了 /usr/local/lib/python3.8/dist-packages。下面我们修改 python udf 插件默认的库搜索路径。
|
发现 Python udf 插件默认搜索的第三方库安装路径是: /lib/python3/dist-packages,而 moment 默认安装到了 /usr/local/lib/python3.8/dist-packages。下面我们修改 Python udf 插件默认的库搜索路径。
|
||||||
先打开 python3 命令行,查看当前的 sys.path。
|
先打开 python3 命令行,查看当前的 sys.path。
|
||||||
|
|
||||||
```python
|
```python
|
||||||
|
@ -754,7 +754,7 @@ create or replace aggregate function myspread as '/root/udf/myspread.py' outputt
|
||||||
|
|
||||||
这个 SQL 语句与创建标量函数的 SQL 语句有两个重要区别。
|
这个 SQL 语句与创建标量函数的 SQL 语句有两个重要区别。
|
||||||
1. 增加了 aggregate 关键字
|
1. 增加了 aggregate 关键字
|
||||||
2. 增加了 bufsize 关键字,用来指定存储中间结果的内存大小,这个数值可以大于实际使用的数值。本例中间结果是两个浮点数组成的 tuple,序列化后实际占用大小只有 32 个字节,但指定的 bufsize 是128,可以用 python 命令行打印实际占用的字节数
|
2. 增加了 bufsize 关键字,用来指定存储中间结果的内存大小,这个数值可以大于实际使用的数值。本例中间结果是两个浮点数组成的 tuple,序列化后实际占用大小只有 32 个字节,但指定的 bufsize 是128,可以用 Python 命令行打印实际占用的字节数
|
||||||
|
|
||||||
```python
|
```python
|
||||||
>>> len(pickle.dumps((12345.6789, 23456789.9877)))
|
>>> len(pickle.dumps((12345.6789, 23456789.9877)))
|
||||||
|
|
|
@ -352,7 +352,7 @@ main 函数可以接收 5 个启动参数,依次是:
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
SQLWriter 类封装了拼 SQL 和写数据的逻辑。所有的表都没有提前创建,而是在发生表不存在错误的时候,再以超级表为模板批量建表,然后重新执行 INSERT 语句。对于其它错误会记录当时执行的 SQL, 以便排查错误和故障恢复。这个类也对 SQL 是否超过最大长度限制做了检查,根据 TDengine 3.0 的限制由输入参数 maxSQLLength 传入了支持的最大 SQL 长度,即 1,048,576 。
|
SQLWriter 类封装了拼 SQL 和写数据的逻辑。所有的表都没有提前创建,而是在发生表不存在错误的时候,再以超级表为模板批量建表,然后重新执行 INSERT 语句。对于其它错误会记录当时执行的 SQL,以便排查错误和故障恢复。这个类也对 SQL 是否超过最大长度限制做了检查,根据 TDengine 3.0 的限制由输入参数 maxSQLLength 传入了支持的最大 SQL 长度,即 1,048,576 。
|
||||||
|
|
||||||
<summary>SQLWriter</summary>
|
<summary>SQLWriter</summary>
|
||||||
|
|
||||||
|
@ -374,7 +374,7 @@ SQLWriter 类封装了拼 SQL 和写数据的逻辑。所有的表都没有提
|
||||||
- 已安装 Python3, 推荐版本 >= 3.8
|
- 已安装 Python3, 推荐版本 >= 3.8
|
||||||
- 已安装 taospy
|
- 已安装 taospy
|
||||||
|
|
||||||
2. 安装 faster-fifo 代替 python 内置的 multiprocessing.Queue
|
2. 安装 faster-fifo 代替 Python 内置的 multiprocessing.Queue
|
||||||
|
|
||||||
```
|
```
|
||||||
pip3 install faster-fifo
|
pip3 install faster-fifo
|
||||||
|
|
|
@ -36,7 +36,7 @@ taosAdapter 提供了以下功能:
|
||||||
- RESTful 接口;
|
- RESTful 接口;
|
||||||
- WebSocket 连接;
|
- WebSocket 连接;
|
||||||
- 兼容 InfluxDB v1 格式写入;
|
- 兼容 InfluxDB v1 格式写入;
|
||||||
- 兼容 OpenTSDB JSON 和 Telnet 格式写入;
|
- 兼容 OpenTSDB JSON 和 TELNET 格式写入;
|
||||||
- 无缝连接到 Telegraf;
|
- 无缝连接到 Telegraf;
|
||||||
- 无缝连接到 collectd;
|
- 无缝连接到 collectd;
|
||||||
- 无缝连接到 StatsD;
|
- 无缝连接到 StatsD;
|
||||||
|
@ -44,9 +44,9 @@ taosAdapter 提供了以下功能:
|
||||||
|
|
||||||
## taosKeeper
|
## taosKeeper
|
||||||
|
|
||||||
taosKeeper 是 TDengine 3.0 版本中新增的监控指标导出工具,旨在方便用户对TDengine 的运行状态和性能指标进行实时监控。通过简单的配置,TDengine 能够将其运行状态、指标等信息上报给 taosKeeper。当接收到监控数据后,taosKeeper 会利用 taosAdapter 提供的 RESTful 接口,将这些数据存储到 TDengine 中。
|
taosKeeper 是 TDengine 3.0 版本中新增的监控指标导出工具,旨在方便用户对 TDengine 的运行状态和性能指标进行实时监控。通过简单的配置,TDengine 能够将其运行状态、指标等信息上报给 taosKeeper。当接收到监控数据后,taosKeeper 会利用 taosAdapter 提供的 RESTful 接口,将这些数据存储到 TDengine 中。
|
||||||
|
|
||||||
taosKeeper 的一个重要价值在于,它能够将多个甚至一批 TDengine 集群的监控数据集中存储在一个统一的平台上。这使得监控软件能够轻松获取这些数据,从而实现对 TDengine 集群的全面监控和实时分析。通过 taosKeeper,用户可以更加便捷地掌握TDengine 的运行状况,及时发现并解决潜在问题,确保系统的稳定性和高效性。
|
taosKeeper 的一个重要价值在于,它能够将多个甚至一批 TDengine 集群的监控数据集中存储在一个统一的平台上。这使得监控软件能够轻松获取这些数据,从而实现对 TDengine 集群的全面监控和实时分析。通过 taosKeeper,用户可以更加便捷地掌握 TDengine 的运行状况,及时发现并解决潜在问题,确保系统的稳定性和高效性。
|
||||||
|
|
||||||
## taosExplorer
|
## taosExplorer
|
||||||
|
|
||||||
|
@ -60,7 +60,7 @@ taosKeeper 的一个重要价值在于,它能够将多个甚至一批 TDengine
|
||||||
|
|
||||||
taosX 作为 TDengine Enterprise 的数据管道功能组件,旨在为用户提供一种无须编写代码即可轻松对接第三方数据源的方法,实现数据的便捷导入。目前,taosX 已支持众多主流数据源,包括 AVEVA PI System、AVEVA Historian、OPC-UA/DA、InfluxDB、OpenTSDB、MQTT、Kafka、CSV、TDengine 2.x、TDengine 3.x、MySQL、PostgreSQL和 Oracle 等。
|
taosX 作为 TDengine Enterprise 的数据管道功能组件,旨在为用户提供一种无须编写代码即可轻松对接第三方数据源的方法,实现数据的便捷导入。目前,taosX 已支持众多主流数据源,包括 AVEVA PI System、AVEVA Historian、OPC-UA/DA、InfluxDB、OpenTSDB、MQTT、Kafka、CSV、TDengine 2.x、TDengine 3.x、MySQL、PostgreSQL和 Oracle 等。
|
||||||
|
|
||||||
在实际使用中, 用户通常无须直接与 taosX 进行交互。 相反, 他们可以通 过taosExplorer 提供的浏览器用户界面轻松访问和使用 taosX 的强大功能。这种设计简化了操作流程,降低了使用门槛,使得用户能够更加专注于数据处理和分析,从而提高工作效率。
|
在实际使用中,用户通常无须直接与 taosX 进行交互。 相反, 他们可以通过 taosExplorer 提供的浏览器用户界面轻松访问和使用 taosX 的强大功能。这种设计简化了操作流程,降低了使用门槛,使得用户能够更加专注于数据处理和分析,从而提高工作效率。
|
||||||
|
|
||||||
## taosX Agent
|
## taosX Agent
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@ taosX Agent 是 TDengine Enterprise 数据管道功能的重要组成部分,
|
||||||
这些应用程序负责向业务集群写入、查询业务数据以及订阅数据。应用程序可以通过以下 3 种方式与业务集群进行交互。
|
这些应用程序负责向业务集群写入、查询业务数据以及订阅数据。应用程序可以通过以下 3 种方式与业务集群进行交互。
|
||||||
- 基于 taosc 的应用程序:采用原生连接的应用程序,直接连接到业务集群,默认端口为 6030。
|
- 基于 taosc 的应用程序:采用原生连接的应用程序,直接连接到业务集群,默认端口为 6030。
|
||||||
- 基于 RESTful 连接的应用程序:使用 RESTful 接口访问业务集群的应用程序,需要通过 taosAdapter 进行连接,默认端口为 6041。
|
- 基于 RESTful 连接的应用程序:使用 RESTful 接口访问业务集群的应用程序,需要通过 taosAdapter 进行连接,默认端口为 6041。
|
||||||
- 基于 WebSkcket 连接的应用程序:采用 WebSocket 连接的应用程序,同样需要通过 taosAdapter 进行连接,默认端口为 6041。
|
- 基于 WebSocket 连接的应用程序:采用 WebSocket 连接的应用程序,同样需要通过 taosAdapter 进行连接,默认端口为 6041。
|
||||||
|
|
||||||
2. 可视化/BI 工具
|
2. 可视化/BI 工具
|
||||||
|
|
||||||
|
@ -85,4 +85,4 @@ TDengine 支持与众多可视化及 BI 工具无缝对接,如 Grafana、Power
|
||||||
|
|
||||||
3. 数据源
|
3. 数据源
|
||||||
|
|
||||||
TDengine 具备强大的数据接入能力,可以对接各种数据源,如 MQTT、OPC-UA/DA、Kafka、AVEVA PI System、AVEVA Historian 等。这使得 TDengine 能够轻松整合来自不同数据源的数据,为用户提供全面、统一的数据视图。
|
TDengine 具备强大的数据接入能力,可以对接各种数据源,如 MQTT、OPC-UA/DA、Kafka、AVEVA PI System、AVEVA Historian 等。这使得 TDengine 能够轻松整合来自不同数据源的数据,为用户提供全面、统一的数据视图。
|
||||||
|
|
|
@ -4,11 +4,11 @@ title: 容量规划
|
||||||
toc_max_heading_level: 4
|
toc_max_heading_level: 4
|
||||||
---
|
---
|
||||||
|
|
||||||
若计划使用 TDengine 搭建一个时序数据平台,须提前对计算资源、存储资源和网络资源进行详细规划,以确保满足业务场景的需求。通常 TDengine 会运行多个进程,包括taosd、taosadapter、taoskeeper、taos-explorer 和 taosx。
|
若计划使用 TDengine 搭建一个时序数据平台,须提前对计算资源、存储资源和网络资源进行详细规划,以确保满足业务场景的需求。通常 TDengine 会运行多个进程,包括 taosd、taosadapter、taoskeeper、taos-explorer 和 taosx。
|
||||||
|
|
||||||
在这些进程中,taoskeeper、taos-explorer、taosadapter 和 taosx 的资源占用相对较少,通常不需要特别关注。此外,这些进程对存储空间的需求也较低,其占用的 CPU 和内存资源一般为 taosd 进程的十分之一到几分之一(特殊场景除外,如数据同步和历史数据迁移。在这些情况下,涛思数据的技术支持团队将提供一对一的服务)。系统管理员应定期监控这些进程的资源消耗,并及时进行相应处理。
|
在这些进程中,taoskeeper、taos-explorer、taosadapter 和 taosx 的资源占用相对较少,通常不需要特别关注。此外,这些进程对存储空间的需求也较低,其占用的 CPU 和内存资源一般为 taosd 进程的十分之一到几分之一(特殊场景除外,如数据同步和历史数据迁移。在这些情况下,涛思数据的技术支持团队将提供一对一的服务)。系统管理员应定期监控这些进程的资源消耗,并及时进行相应处理。
|
||||||
|
|
||||||
在本节中,我们将重点讨论 TDengine 数据库引擎的核心进程—taosd 的资源规划。合理的资源规划将确保 taosd 进程的高效运行,从而提高整个时序数据平台的性能和稳定性。
|
在本节中,我们将重点讨论 TDengine 数据库引擎的核心进程 taosd 的资源规划。合理的资源规划将确保 taosd 进程的高效运行,从而提高整个时序数据平台的性能和稳定性。
|
||||||
|
|
||||||
## 服务器内存需求
|
## 服务器内存需求
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ toc_max_heading_level: 4
|
||||||
为了帮助用户更好地理解和配置这些参数,TDengine 的官方文档的数据库管理部分提供了详细说明。根据这些参数,可以估算出一个数据库所需的内存大小,具体计算方式如下(具体数值须根据实际情况进行调整)。
|
为了帮助用户更好地理解和配置这些参数,TDengine 的官方文档的数据库管理部分提供了详细说明。根据这些参数,可以估算出一个数据库所需的内存大小,具体计算方式如下(具体数值须根据实际情况进行调整)。
|
||||||
vgroups ×replica × (buffer + pages × pagesize + cachesize)
|
vgroups ×replica × (buffer + pages × pagesize + cachesize)
|
||||||
|
|
||||||
需要明确的是,这些内存资源并非仅由单一服务器承担,而是由整个集群中的所有dnode 共同分摊,也就是说,这些资源的负担实际上是由这些 dnode 所在的服务器集群共同承担的。若集群内存在多个数据库,那么所需的内存总量还须将这些数据库的需求累加起来。更为复杂的情形在于,如果集群中的 dnode 并非一开始就全部部署完毕,而是在使用过程中随着节点负载的上升逐步添加服务器和 dnode,那么新加入的数据库可能会导致新旧 dnode 之间的负载分布不均。在这种情况下,简单地进行理论计算是不够准确的,必须考虑到各个 dnode 的实际负载状况来进行综合评估。
|
需要明确的是,这些内存资源并非仅由单一服务器承担,而是由整个集群中的所有 dnode 共同分摊,也就是说,这些资源的负担实际上是由这些 dnode 所在的服务器集群共同承担的。若集群内存在多个数据库,那么所需的内存总量还须将这些数据库的需求累加起来。更为复杂的情形在于,如果集群中的 dnode 并非一开始就全部部署完毕,而是在使用过程中随着节点负载的上升逐步添加服务器和 dnode,那么新加入的数据库可能会导致新旧 dnode 之间的负载分布不均。在这种情况下,简单地进行理论计算是不够准确的,必须考虑到各个 dnode 的实际负载状况来进行综合评估。
|
||||||
|
|
||||||
系统管理员可以通过如下 SQL 查看 information_schema 库中的 ins_vnodes 表来获得所有数据库所有 vnodes 在各个 dnode 上的分布。
|
系统管理员可以通过如下 SQL 查看 information_schema 库中的 ins_vnodes 表来获得所有数据库所有 vnodes 在各个 dnode 上的分布。
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ dnode_id |vgroup_id | db_name | status | role_time | start_time | restored |
|
||||||
|
|
||||||
1. 原生连接方式
|
1. 原生连接方式
|
||||||
|
|
||||||
由于客户端应用程序采用 taosc 与服务器进行通信,因此会产生一定的内存消耗。这些内存消耗主要源于:写入操作中的 SQL、表元数据信息的缓存,以及固有的结构开销。假设该数据库服务能够支持的最大表数量为 N(每个通过超级表创建的表的元数据开销约为 256B),最大并发写入线程数为 T,以及最大 SQL 语句长度为 S(通常情况下为1MB)。基于这些参数,我们可以对客户端的内存消耗进行估算(单位为 MB)。
|
由于客户端应用程序采用 taosc 与服务器进行通信,因此会产生一定的内存消耗。这些内存消耗主要源于:写入操作中的 SQL、表元数据信息的缓存,以及固有的结构开销。假设该数据库服务能够支持的最大表数量为 N(每个通过超级表创建的表的元数据开销约为 256B),最大并发写入线程数为 T,以及最大 SQL 语句长度为 S(通常情况下为 1MB)。基于这些参数,我们可以对客户端的内存消耗进行估算(单位为 MB)。
|
||||||
M = (T × S × 3 + (N / 4096) + 100)
|
M = (T × S × 3 + (N / 4096) + 100)
|
||||||
|
|
||||||
例如,用户最大并发写入线程数为 100,子表数为 10 000 000,那么客户端的内存最低要求如下:
|
例如,用户最大并发写入线程数为 100,子表数为 10 000 000,那么客户端的内存最低要求如下:
|
||||||
|
@ -101,7 +101,7 @@ $ du -hd1 <dataDir>/vnode --exclude=wal
|
||||||
除了存储容量的需求以外,用户可能还希望在特定容量下降低存储成本。为了满足这一需求,TDengine 推出了多级存储功能。该功能允许将近期产生且访问频率较高的数据存储在高成本存储设备上,而将时间较长且访问频率较低的数据存储在低成本存储设备上。通过这种方式,TDengine 实现了以下目标。
|
除了存储容量的需求以外,用户可能还希望在特定容量下降低存储成本。为了满足这一需求,TDengine 推出了多级存储功能。该功能允许将近期产生且访问频率较高的数据存储在高成本存储设备上,而将时间较长且访问频率较低的数据存储在低成本存储设备上。通过这种方式,TDengine 实现了以下目标。
|
||||||
- 降低存储成本:通过将海量极冷数据存储在廉价存储设备上,可以显著降低存储成本。
|
- 降低存储成本:通过将海量极冷数据存储在廉价存储设备上,可以显著降低存储成本。
|
||||||
- 提高写入性能:每级存储支持多个挂载点,WAL 文件也支持 0 级的多挂载点并行写入,这些措施极大地提高了写入性能(实际场景中的持续写入速度可达 3 亿测
|
- 提高写入性能:每级存储支持多个挂载点,WAL 文件也支持 0 级的多挂载点并行写入,这些措施极大地提高了写入性能(实际场景中的持续写入速度可达 3 亿测
|
||||||
点 / 秒),在机械硬盘上也能获得极高的硬盘 I/O 吞吐(实测可达 2GB/s)。
|
点/秒),在机械硬盘上也能获得极高的硬盘 I/O 吞吐(实测可达 2GB/s)。
|
||||||
|
|
||||||
用户可以根据冷热数据的比例来决定高速和低成本存储设备之间的容量划分。
|
用户可以根据冷热数据的比例来决定高速和低成本存储设备之间的容量划分。
|
||||||
|
|
||||||
|
@ -120,7 +120,7 @@ TDengine 的多级存储功能在使用上还具备以下优点。
|
||||||
- 集群为响应维护指令而额外需要的内部通信带宽,如从单副本切换到三副本导致的数据复制、修复指定 dnode 引发的数据复制等情况。
|
- 集群为响应维护指令而额外需要的内部通信带宽,如从单副本切换到三副本导致的数据复制、修复指定 dnode 引发的数据复制等情况。
|
||||||
|
|
||||||
为了估算入站带宽需求,我们可以采用以下方式:
|
为了估算入站带宽需求,我们可以采用以下方式:
|
||||||
由 于 taosc 写入在 RPC 通信过程中自带压缩功能,因此写入带宽需求相对于RESTful/WebSocket 连接方式较低。在这里,我们将基于 RESTful/WebSocket 连接方式的
|
由 于 taosc 写入在 RPC 通信过程中自带压缩功能,因此写入带宽需求相对于 RESTful/WebSocket 连接方式较低。在这里,我们将基于 RESTful/WebSocket 连接方式的
|
||||||
带宽需求来估算写入请求的带宽。
|
带宽需求来估算写入请求的带宽。
|
||||||
|
|
||||||
示例:1000 万块智能电表,电表每 15min 采集一次数据,每次采集的数据量为 20B,可计算出平均带宽需求为 0.22MB。
|
示例:1000 万块智能电表,电表每 15min 采集一次数据,每次采集的数据量为 20B,可计算出平均带宽需求为 0.22MB。
|
||||||
|
@ -154,9 +154,9 @@ TDengine 的多级存储功能在使用上还具备以下优点。
|
||||||
| taosKeeper | 6043 | TCP |
|
| taosKeeper | 6043 | TCP |
|
||||||
| statsd 格式写入接口 | 6044 | TCP/UDP |
|
| statsd 格式写入接口 | 6044 | TCP/UDP |
|
||||||
| collectd 格式写入接口 | 6045 | TCP/UDP |
|
| collectd 格式写入接口 | 6045 | TCP/UDP |
|
||||||
| openTSDB Telnet 格式写入接口 | 6046 | TCP |
|
| openTSDB TELNET 格式写入接口 | 6046 | TCP |
|
||||||
| collectd 使用 openTSDB Telnet 格式写入接口 | 6047 | TCP |
|
| collectd 使用 openTSDB TELNET 格式写入接口 | 6047 | TCP |
|
||||||
| icinga2 使用 openTSDB Telnet 格式写入接口 | 6048 | TCP |
|
| icinga2 使用 openTSDB TELNET 格式写入接口 | 6048 | TCP |
|
||||||
| tcollector 使用 openTSDB Telnet 格式写入接口 | 6049 | TCP |
|
| tcollector 使用 openTSDB TELNET 格式写入接口 | 6049 | TCP |
|
||||||
| taosX | 6050, 6055 | TCP |
|
| taosX | 6050, 6055 | TCP |
|
||||||
| taosExplorer | 6060 | TCP |
|
| taosExplorer | 6060 | TCP |
|
||||||
|
|
|
@ -14,18 +14,18 @@ taosd 是 TDengine 集群中最主要的服务组件,本节介绍手动部署
|
||||||
|
|
||||||
#### 1. 清除数据
|
#### 1. 清除数据
|
||||||
|
|
||||||
如果搭建集群的物理节点中存在之前的测试数据或者装过其他版本(如 1.x/2.x)的TDengine,请先将其删除,并清空所有数据。
|
如果搭建集群的物理节点中存在之前的测试数据或者装过其他版本(如 1.x/2.x)的 TDengine,请先将其删除,并清空所有数据。
|
||||||
|
|
||||||
#### 2. 检查环境
|
#### 2. 检查环境
|
||||||
|
|
||||||
在进行 TDengine 集群部署之前,全面检查所有 dnode 以及应用程序所在物理节点的网络设置至关重要。以下是检查步骤:
|
在进行 TDengine 集群部署之前,全面检查所有 dnode 以及应用程序所在物理节点的网络设置至关重要。以下是检查步骤:
|
||||||
|
|
||||||
- 第 1 步,在每个物理节点上执行 hostname -f 命令,以查看并确认所有节点的hostname 是唯一的。对于应用程序驱动所在的节点,这一步骤可以省略。
|
- 第 1 步,在每个物理节点上执行 hostname -f 命令,以查看并确认所有节点的hostname 是唯一的。对于应用程序驱动所在的节点,这一步骤可以省略。
|
||||||
- 第 2 步,在每个物理节点上执行 ping host 命令,其中 host 是其他物理节点的 hostname。这一步骤旨在检测当前节点与其他物理节点之间的网络连通性。如果发现无法 ping 通,请立即检查网络和 DNS 设置。对于 Linux 操作系统,请检查 /etc/hosts 文件;对于 Windows 操作系统,请检查C:\Windows\system32\drivers\etc\hosts 文件。网络不通畅将导致无法组建集群,请务必解决此问题。
|
- 第 2 步,在每个物理节点上执行 ping host 命令,其中 host 是其他物理节点的 hostname。这一步骤旨在检测当前节点与其他物理节点之间的网络连通性。如果发现无法 ping 通,请立即检查网络和 DNS 设置。对于 Linux 操作系统,请检查 /etc/hosts 文件;对于 Windows 操作系统,请检查 `C:\Windows\system32\drivers\etc\hosts` 文件。网络不通畅将导致无法组建集群,请务必解决此问题。
|
||||||
- 第 3 步,在应用程序运行的物理节点上重复上述网络检测步骤。如果发现网络不通畅,应用程序将无法连接到 taosd 服务。此时,请仔细检查应用程序所在物理节点的DNS 设置或 hosts 文件,确保其配置正确无误。
|
- 第 3 步,在应用程序运行的物理节点上重复上述网络检测步骤。如果发现网络不通畅,应用程序将无法连接到 taosd 服务。此时,请仔细检查应用程序所在物理节点的 DNS 设置或 hosts 文件,确保其配置正确无误。
|
||||||
- 第 4 步,检查端口,确保集群中所有主机在端口 6030 上的 TCP 能够互通。
|
- 第 4 步,检查端口,确保集群中所有主机在端口 6030 上的 TCP 能够互通。
|
||||||
|
|
||||||
通过以上步骤,你可以确保所有节点在网络层面顺利通信,从而为成功部署TDengine 集群奠定坚实基础
|
通过以上步骤,你可以确保所有节点在网络层面顺利通信,从而为成功部署 TDengine 集群奠定坚实基础
|
||||||
|
|
||||||
#### 3. 安装
|
#### 3. 安装
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@ taos> show dnodes;
|
||||||
create dnode "h2.taosdata.com:6030"
|
create dnode "h2.taosdata.com:6030"
|
||||||
```
|
```
|
||||||
|
|
||||||
将新 dnode 的 endpoint 添加进集群的 endpoint 列表。需要为 `fqdn:port` 加上双引号,否则运行时出错。请注意将示例的 h2.taosdata.com:6030 替换为这个新 dnode 的 endpoint。然后执行如下 SQL 查看新节点是否成功加入。若要加入的 dnode 当前处于离线状态,请参考本节后面的 “常见问题”部分进行解决。
|
将新 dnode 的 endpoint 添加进集群的 endpoint 列表。需要为 `fqdn:port` 加上双引号,否则运行时出错。请注意将示例的 h2.taosdata.com:6030 替换为这个新 dnode 的 endpoint。然后执行如下 SQL 查看新节点是否成功加入。若要加入的 dnode 当前处于离线状态,请参考本节后面的“常见问题”部分进行解决。
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
show dnodes;
|
show dnodes;
|
||||||
|
@ -202,7 +202,7 @@ http {
|
||||||
|
|
||||||
### 部署 taosKeeper
|
### 部署 taosKeeper
|
||||||
|
|
||||||
如果要想使用 TDegnine 的监控功能,taosKeeper 是一个必要的组件,关于监控请参考[TDinsight](../../reference/components/tdinsight),关于部署 taosKeeper 的细节请参考[taosKeeper参考手册](../../reference/components/taoskeeper)。
|
如果要想使用 TDegnine 的监控功能,taosKeeper 是一个必要的组件,关于监控请参考 [TDinsight](../../reference/components/tdinsight),关于部署 taosKeeper 的细节请参考 [taosKeeper 参考手册](../../reference/components/taoskeeper)。
|
||||||
|
|
||||||
### 部署 taosX
|
### 部署 taosX
|
||||||
|
|
||||||
|
@ -210,11 +210,11 @@ http {
|
||||||
|
|
||||||
### 部署 taosX-Agent
|
### 部署 taosX-Agent
|
||||||
|
|
||||||
有些数据源如 Pi, OPC 等,因为网络条件和数据源访问的限制,taosX 无法直接访问数据源,这种情况下需要部署一个代理服务 taosX-Agent,关于它的详细说明和部署请参考企业版参考手册。
|
有些数据源如 PI、OPC 等,因为网络条件和数据源访问的限制,taosX 无法直接访问数据源,这种情况下需要部署一个代理服务 taosX-Agent,关于它的详细说明和部署请参考企业版参考手册。
|
||||||
|
|
||||||
### 部署 taos-Explorer
|
### 部署 taos-Explorer
|
||||||
|
|
||||||
TDengine 提供了可视化管理 TDengine 集群的能力,要想使用图形化界面需要部署 taos-Explorer 服务,关于它的详细说明和部署请参考[taos-Explorer 参考手册](../../reference/components/explorer)
|
TDengine 提供了可视化管理 TDengine 集群的能力,要想使用图形化界面需要部署 taos-Explorer 服务,关于它的详细说明和部署请参考 [taos-Explorer 参考手册](../../reference/components/explorer)
|
||||||
|
|
||||||
|
|
||||||
## Docker 部署
|
## Docker 部署
|
||||||
|
@ -299,14 +299,14 @@ echo 127.0.0.1 tdengine |sudo tee -a /etc/hosts
|
||||||
taos -h tdengine -P 6030
|
taos -h tdengine -P 6030
|
||||||
```
|
```
|
||||||
|
|
||||||
如果 TAOS_FQDN 被设置为与所在主机名相同,则效果与“在 host 网络模式下启动TDengine”相同。
|
如果 TAOS_FQDN 被设置为与所在主机名相同,则效果与“在 host 网络模式下启动 TDengine”相同。
|
||||||
|
|
||||||
## Kubernetes 部署
|
## Kubernetes 部署
|
||||||
|
|
||||||
作为面向云原生架构设计的时序数据库,TDengine 本身就支持 Kubernetes 部署。这里介绍如何使用 YAML 文件从头一步一步创建一个可用于生产使用的高可用 TDengine 集群,并重点介绍 Kubernetes 环境下 TDengine 的常用操作。本小节要求读者对 Kubernetes 有一定的了解,可以熟练运行常见的 kubectl 命令,了解 statefulset、service、pvc 等概念,对这些概念不熟悉的读者,可以先参考 Kubernetes 的官网进行学习。
|
作为面向云原生架构设计的时序数据库,TDengine 本身就支持 Kubernetes 部署。这里介绍如何使用 YAML 文件从头一步一步创建一个可用于生产使用的高可用 TDengine 集群,并重点介绍 Kubernetes 环境下 TDengine 的常用操作。本小节要求读者对 Kubernetes 有一定的了解,可以熟练运行常见的 kubectl 命令,了解 statefulset、service、pvc 等概念,对这些概念不熟悉的读者,可以先参考 Kubernetes 的官网进行学习。
|
||||||
为了满足高可用的需求,集群需要满足如下要求:
|
为了满足高可用的需求,集群需要满足如下要求:
|
||||||
- 3 个及以上 dnode :TDengine 的同一个 vgroup 中的多个 vnode ,不允许同时分布在一个 dnode ,所以如果创建 3 副本的数据库,则 dnode 数大于等于 3
|
- 3 个及以上 dnode:TDengine 的同一个 vgroup 中的多个 vnode,不允许同时分布在一个 dnode ,所以如果创建 3 副本的数据库,则 dnode 数大于等于 3
|
||||||
- 3 个 mnode :mnode 负责整个集群的管理工作,TDengine 默认是一个 mnode。如果这个 mnode 所在的 dnode 掉线,则整个集群不可用。
|
- 3 个 mnode:mnode 负责整个集群的管理工作,TDengine 默认是一个 mnode。如果这个 mnode 所在的 dnode 掉线,则整个集群不可用。
|
||||||
- 数据库的 3 副本:TDengine 的副本配置是数据库级别,所以数据库 3 副本可满足在 3 个 dnode 的集群中,任意一个 dnode 下线,都不影响集群的正常使用。如果下线 dnode 个数为 2 时,此时集群不可用,因为 RAFT 无法完成选举。(企业版:在灾难恢复场景,任一节点数据文件损坏,都可以通过重新拉起 dnode 进行恢复)
|
- 数据库的 3 副本:TDengine 的副本配置是数据库级别,所以数据库 3 副本可满足在 3 个 dnode 的集群中,任意一个 dnode 下线,都不影响集群的正常使用。如果下线 dnode 个数为 2 时,此时集群不可用,因为 RAFT 无法完成选举。(企业版:在灾难恢复场景,任一节点数据文件损坏,都可以通过重新拉起 dnode 进行恢复)
|
||||||
|
|
||||||
### 前置条件
|
### 前置条件
|
||||||
|
@ -342,7 +342,7 @@ spec:
|
||||||
|
|
||||||
### 有状态服务 StatefulSet
|
### 有状态服务 StatefulSet
|
||||||
|
|
||||||
根据 Kubernetes 对各类部署的说明,我们将使用 StatefulSet 作为 TDengine 的部署资源类型。 创建文件 tdengine.yaml,其中 replicas 定义集群节点的数量为 3。节点时区为中国(Asia/Shanghai),每个节点分配 5G 标准(standard)存储,你也可以根据实际情况进行相应修改。
|
根据 Kubernetes 对各类部署的说明,我们将使用 StatefulSet 作为 TDengine 的部署资源类型。 创建文件 tdengine.yaml,其中 replicas 定义集群节点的数量为 3。节点时区为中国(Asia/Shanghai),每个节点分配 5GB 标准(standard)存储,你也可以根据实际情况进行相应修改。
|
||||||
|
|
||||||
请特别注意 startupProbe 的配置,在 dnode 的 Pod 掉线一段时间后,再重新启动,这个时候新上线的 dnode 会短暂不可用。如果 startupProbe 配置过小,Kubernetes 会认为该 Pod 处于不正常的状态,并尝试重启该 Pod,该 dnode 的 Pod 会频繁重启,始终无法恢复到正常状态。
|
请特别注意 startupProbe 的配置,在 dnode 的 Pod 掉线一段时间后,再重新启动,这个时候新上线的 dnode 会短暂不可用。如果 startupProbe 配置过小,Kubernetes 会认为该 Pod 处于不正常的状态,并尝试重启该 Pod,该 dnode 的 Pod 会频繁重启,始终无法恢复到正常状态。
|
||||||
|
|
||||||
|
|
|
@ -8,41 +8,42 @@ sidebar_label: 集群维护
|
||||||
|
|
||||||
## 节点管理
|
## 节点管理
|
||||||
|
|
||||||
如何管理集群节点请参考[节点管理](../../reference/taos-sql/node)
|
如何管理集群节点请参考 [节点管理](../../reference/taos-sql/node)
|
||||||
|
|
||||||
## 数据重整
|
## 数据重整
|
||||||
|
|
||||||
TDengine 面向多种写入场景,而很多写入场景下,TDengine 的存储会导致数据存储的放大或数据文件的空洞等。这一方面影响数据的存储效率,另一方面也会影响查询效率。为了解决上述问题,TDengine 企业版提供了对数据的重整功能,即 DATA COMPACT 功能,将存储的数据文件重新整理,删除文件空洞和无效数据,提高数据的组织度,从而提高存储和查询的效率。数据重整功能在 3.0.3.0 版本第一次发布,此后又经过了多次迭代优化,建议使用最新版本。
|
TDengine 面向多种写入场景,而很多写入场景下,TDengine 的存储会导致数据存储的放大或数据文件的空洞等。这一方面影响数据的存储效率,另一方面也会影响查询效率。为了解决上述问题,TDengine 企业版提供了对数据的重整功能,即 data compact 功能,将存储的数据文件重新整理,删除文件空洞和无效数据,提高数据的组织度,从而提高存储和查询的效率。数据重整功能在 3.0.3.0 版本第一次发布,此后又经过了多次迭代优化,建议使用最新版本。
|
||||||
|
|
||||||
### 语法
|
### 语法
|
||||||
|
|
||||||
```SQL
|
```SQL
|
||||||
COMPACT DATABASE db_name [start with 'XXXX'] [end with 'YYYY'];
|
compact DATABASE db_name [start with 'XXXX'] [end with 'YYYY'] [META_ONLY];
|
||||||
COMPACT [db_name.]VGROUPS IN (vgroup_id1, vgroup_id2, ...) [start with 'XXXX'] [end with 'YYYY'];
|
compact [db_name.]vgroups IN (vgroup_id1, vgroup_id2, ...) [start with 'XXXX'] [end with 'YYYY'] [META_ONLY];
|
||||||
SHOW COMPACTS;
|
show compacts;
|
||||||
SHOW COMPACT compact_id;
|
show compact compact_id;
|
||||||
KILL COMPACT compact_id;
|
kill compact compact_id;
|
||||||
```
|
```
|
||||||
|
|
||||||
### 效果
|
### 效果
|
||||||
|
|
||||||
- 扫描并压缩指定的 DB 中所有 VGROUP 中 VNODE 的所有数据文件
|
- 扫描并压缩指定的 DB 中所有 vgroup 中 vnode 的所有数据文件
|
||||||
- 扫描并压缩 DB 中指定的 VGROUP 列表中 VNODE 的所有数据文件, 若 db_name 为空,则默认为当前数据库
|
- 扫描并压缩 DB 中指定的 vgroup 列表中 vnode 的所有数据文件, 若 db_name 为空,则默认为当前数据库
|
||||||
- COMPCAT 会删除被删除数据以及被删除的表的数据
|
- compact 会删除被删除数据以及被删除的表的数据
|
||||||
- COMPACT 会合并多个 STT 文件
|
- compact 会合并多个 STT 文件
|
||||||
- 可通过 start with 关键字指定 COMPACT 数据的起始时间
|
- 可通过 start with 关键字指定 compact 数据的起始时间
|
||||||
- 可通过 end with 关键字指定 COMPACT 数据的终止时间
|
- 可通过 end with 关键字指定 compact 数据的终止时间
|
||||||
- COMPACT 命令会返回 COMPACT 任务的 ID
|
- 可通过 `META_ONLY` 关键字指定只 compact 元数据。元数据默认情况下不会 compact。
|
||||||
- COMPACT 任务会在后台异步执行,可以通过 SHOW COMPACTS 命令查看 COMPACT 任务的进度
|
- compact 命令会返回 compact 任务的 ID
|
||||||
- SHOW 命令会返回 COMPACT 任务的 ID,可以通过 KILL COMPACT 命令终止 COMPACT 任务
|
- compact 任务会在后台异步执行,可以通过 show compacts 命令查看 compact 任务的进度
|
||||||
|
- show 命令会返回 compact 任务的 ID,可以通过 kill compact 命令终止 compact 任务
|
||||||
|
|
||||||
|
|
||||||
### 补充说明
|
### 补充说明
|
||||||
|
|
||||||
- COMPACT 为异步,执行 COMPACT 命令后不会等 COMPACT 结束就会返回。如果上一个 COMPACT 没有完成则再发起一个 COMPACT 任务,则会等上一个任务完成后再返回。
|
- compact 为异步,执行 compact 命令后不会等 compact 结束就会返回。如果上一个 compact 没有完成则再发起一个 compact 任务,则会等上一个任务完成后再返回。
|
||||||
- COMPACT 可能阻塞写入,尤其是在 stt_trigger = 1 的数据库中,但不阻塞查询。
|
- compact 可能阻塞写入,尤其是在 stt_trigger = 1 的数据库中,但不阻塞查询。
|
||||||
|
|
||||||
## Vgroup Leader 再平衡
|
## vgroup leader 再平衡
|
||||||
|
|
||||||
当多副本集群中的一个或多个节点因为升级或其它原因而重启后,有可能出现集群中各个 dnode 负载不均衡的现象,极端情况下会出现所有 vgroup 的 leader 都位于同一个 dnode 的情况。为了解决这个问题,可以使用下面的命令,该命令在 3.0.4.0 版本中首次发布,建议尽可能使用最新版本。
|
当多副本集群中的一个或多个节点因为升级或其它原因而重启后,有可能出现集群中各个 dnode 负载不均衡的现象,极端情况下会出现所有 vgroup 的 leader 都位于同一个 dnode 的情况。为了解决这个问题,可以使用下面的命令,该命令在 3.0.4.0 版本中首次发布,建议尽可能使用最新版本。
|
||||||
|
|
||||||
|
@ -54,15 +55,15 @@ balance vgroup leader database <database_name>; # 再平衡一个 database 内
|
||||||
|
|
||||||
### 功能
|
### 功能
|
||||||
|
|
||||||
尝试让一个或所有 vgroup 的 leader在各自的replica节点上均匀分布。这个命令会让 vgroup 强制重新选举,通过重新选举,在选举的过程中,改变 vgroup 的leader,通过这个方式,最终让leader均匀分布。
|
尝试让一个或所有 vgroup 的 leader 在各自的 replica 节点上均匀分布。这个命令会让 vgroup 强制重新选举,通过重新选举,在选举的过程中,改变 vgroup 的 leader,通过这个方式,最终让 leader 均匀分布。
|
||||||
|
|
||||||
### 注意
|
### 注意
|
||||||
|
|
||||||
Vgroup 选举本身带有随机性,所以通过选举的重新分布产生的均匀分布也是带有一定的概率,不会完全的均匀。该命令的副作用是影响查询和写入,在vgroup重新选举时,从开始选举到选举出新的 leader 这段时间,这 个vgroup 无法写入和查询。选举过程一般在秒级完成。所有的vgroup会依次逐个重新选举。
|
vgroup 选举本身带有随机性,所以通过选举的重新分布产生的均匀分布也是带有一定的概率,不会完全的均匀。该命令的副作用是影响查询和写入,在 vgroup 重新选举时,从开始选举到选举出新的 leader 这段时间,这 个vgroup 无法写入和查询。选举过程一般在秒级完成。所有的 vgroup 会依次逐个重新选举。
|
||||||
|
|
||||||
## 恢复数据节点
|
## 恢复数据节点
|
||||||
|
|
||||||
当集群中的某个数据节点(dnode)的数据全部丢失或被破坏,比如磁盘损坏或者目录被误删除,可以通过 restore dnode 命令来恢复该数据节点上的部分或全部逻辑节点,该功能依赖多副本中的其它副本进行数据复制,所以只在集群中 dnode 数量大于等于 3 且副本数为 3 的情况下能够工作。
|
当集群中的某个数据节点(dnode)的数据全部丢失或被破坏,比如磁盘损坏或者目录被误删除,可以通过 `restore dnode` 命令来恢复该数据节点上的部分或全部逻辑节点,该功能依赖多副本中的其它副本进行数据复制,所以只在集群中 dnode 数量大于等于 3 且副本数为 3 的情况下能够工作。
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
restore dnode <dnode_id>;# 恢复dnode上的mnode,所有vnode和qnode
|
restore dnode <dnode_id>;# 恢复dnode上的mnode,所有vnode和qnode
|
||||||
|
@ -73,12 +74,12 @@ restore qnode on dnode <dnode_id>;# 恢复dnode上的qnode
|
||||||
|
|
||||||
### 限制
|
### 限制
|
||||||
|
|
||||||
- 该功能是基于已有的复制功能的恢复,不是灾难恢复或者备份恢复,所以对于要恢复的 mnode 和 vnode来说,使用该命令的前提是还存在该 mnode 或 vnode 的其它两个副本仍然能够正常工作。
|
- 该功能是基于已有的复制功能的恢复,不是灾难恢复或者备份恢复,所以对于要恢复的 mnode 和 vnode 来说,使用该命令的前提是还存在该 mnode 或 vnode 的其它两个副本仍然能够正常工作。
|
||||||
- 该命令不能修复数据目录中的个别文件的损坏或者丢失。例如,如果某个 mnode 或者 vnode 中的个别文件或数据损坏,无法单独恢复损坏的某个文件或者某块数据。此时,可以选择将该 mnode/vnode 的数据全部清空再进行恢复。
|
- 该命令不能修复数据目录中的个别文件的损坏或者丢失。例如,如果某个 mnode 或者 vnode 中的个别文件或数据损坏,无法单独恢复损坏的某个文件或者某块数据。此时,可以选择将该 mnode/vnode 的数据全部清空再进行恢复。
|
||||||
|
|
||||||
## 分裂虚拟组
|
## 分裂虚拟组
|
||||||
|
|
||||||
当一个 vgroup 因为子表数过多而导致 CPU 或 Disk 资源使用量负载过高时,增加 dnode 节点后,可通过split vgroup命令把该vgroup分裂为两个虚拟组。分裂完成后,新产生的两个 vgroup 承担原来由一个 vgroup 提供的读写服务。该命令在 3.0.6.0 版本第一次发布,建议尽可能使用最新版本。
|
当一个 vgroup 因为子表数过多而导致 CPU 或 Disk 资源使用量负载过高时,增加 dnode 节点后,可通过 `split vgroup` 命令把该 vgroup 分裂为两个虚拟组。分裂完成后,新产生的两个 vgroup 承担原来由一个 vgroup 提供的读写服务。该命令在 3.0.6.0 版本第一次发布,建议尽可能使用最新版本。
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
split vgroup <vgroup_id>
|
split vgroup <vgroup_id>
|
||||||
|
@ -87,7 +88,7 @@ split vgroup <vgroup_id>
|
||||||
### 注意
|
### 注意
|
||||||
|
|
||||||
- 单副本库虚拟组,在分裂完成后,历史时序数据总磁盘空间使用量,可能会翻倍。所以,在执行该操作之前,通过增加 dnode 节点方式,确保集群中有足够的 CPU 和磁盘资源,避免资源不足现象发生。
|
- 单副本库虚拟组,在分裂完成后,历史时序数据总磁盘空间使用量,可能会翻倍。所以,在执行该操作之前,通过增加 dnode 节点方式,确保集群中有足够的 CPU 和磁盘资源,避免资源不足现象发生。
|
||||||
- 该命令为 DB 级事务;执行过程,当前DB的其它管理事务将会被拒绝。集群中,其它DB不受影响。
|
- 该命令为 DB 级事务;执行过程,当前 DB 的其它管理事务将会被拒绝。集群中,其它 DB 不受影响。
|
||||||
- 分裂任务执行过程中,可持续提供读写服务;期间,可能存在可感知的短暂的读写业务中断。
|
- 分裂任务执行过程中,可持续提供读写服务;期间,可能存在可感知的短暂的读写业务中断。
|
||||||
- 在分裂过程中,不支持流和订阅。分裂结束后,历史 WAL 会清空。
|
- 在分裂过程中,不支持流和订阅。分裂结束后,历史 WAL 会清空。
|
||||||
- 分裂过程中,可支持节点宕机重启容错;但不支持节点磁盘故障容错。
|
- 分裂过程中,可支持节点宕机重启容错;但不支持节点磁盘故障容错。
|
||||||
|
@ -96,8 +97,6 @@ split vgroup <vgroup_id>
|
||||||
|
|
||||||
从 3.1.1.0 版本开始,TDengine Enterprise 支持在线热更新 `supportVnodes` 这个很重要的 dnode 配置参数。这个参数的原始配置方式是在 `taos.cfg` 配置文件中,表示该 dnode 能够支持的最大的 vnode 数量。当创建一个数据库时需要分配新的 vnode,当删除一个数据库时其 vnode 都会被销毁。
|
从 3.1.1.0 版本开始,TDengine Enterprise 支持在线热更新 `supportVnodes` 这个很重要的 dnode 配置参数。这个参数的原始配置方式是在 `taos.cfg` 配置文件中,表示该 dnode 能够支持的最大的 vnode 数量。当创建一个数据库时需要分配新的 vnode,当删除一个数据库时其 vnode 都会被销毁。
|
||||||
|
|
||||||
但在线更新 `supportVnodes` 不会产生持久化,当系统重启后,允许的最大 vnode 数量仍然由 taos.cfg 中配置的 `supportVnodes` 决定。
|
|
||||||
|
|
||||||
如果通过在线更新或配置文件方式设置的 `supportVnodes` 小于 dnode 当前已经实际存在的 vnode 数量,已经存在的 vnode 不会受影响。但当尝试创建新的 database 时,是否能够创建成功则仍然受实际生效的 `supportVnodes` 参数决定。
|
如果通过在线更新或配置文件方式设置的 `supportVnodes` 小于 dnode 当前已经实际存在的 vnode 数量,已经存在的 vnode 不会受影响。但当尝试创建新的 database 时,是否能够创建成功则仍然受实际生效的 `supportVnodes` 参数决定。
|
||||||
|
|
||||||
## 双副本
|
## 双副本
|
||||||
|
@ -106,7 +105,7 @@ split vgroup <vgroup_id>
|
||||||
|
|
||||||
### 查看 Vgroups 的状态
|
### 查看 Vgroups 的状态
|
||||||
|
|
||||||
通过以下 SQL 命令参看双副本数据库中各 Vgroup 的状态:
|
通过以下 SQL 命令参看双副本数据库中各 vgroup 的状态:
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
show arbgroups;
|
show arbgroups;
|
||||||
|
@ -120,15 +119,15 @@ select * from information_schema.ins_arbgroups;
|
||||||
|
|
||||||
```
|
```
|
||||||
is_sync 有以下两种取值:
|
is_sync 有以下两种取值:
|
||||||
- 0: Vgroup 数据未达成同步。在此状态下,如果 Vgroup 中的某一 Vnode 不可访问,另一个 Vnode 无法被指定为 `AssignedLeader` role,该 Vgroup 将无法提供服务。
|
- 0: vgroup 数据未达成同步。在此状态下,如果 vgroup 中的某一 vnode 不可访问,另一个 vnode 无法被指定为 `AssignedLeader` role,该 vgroup 将无法提供服务。
|
||||||
- 1: Vgroup 数据达成同步。在此状态下,如果 Vgroup 中的某一 Vnode 不可访问,另一个 Vnode 可以被指定为 `AssignedLeader` role,该 Vgroup 可以继续提供服务。
|
- 1: vgroup 数据达成同步。在此状态下,如果 vgroup 中的某一 vnode 不可访问,另一个 vnode 可以被指定为 `AssignedLeader` role,该 vgroup 可以继续提供服务。
|
||||||
|
|
||||||
assigned_dnode:
|
assigned_dnode:
|
||||||
- 标识被指定为 AssignedLeader 的 Vnode 的 DnodeId
|
- 标识被指定为 AssignedLeader 的 vnode 的 DnodeId
|
||||||
- 未指定 AssignedLeader时,该列显示 NULL
|
- 未指定 AssignedLeader 时,该列显示 NULL
|
||||||
|
|
||||||
assigned_token:
|
assigned_token:
|
||||||
- 标识被指定为 AssignedLeader 的 Vnode 的 Token
|
- 标识被指定为 AssignedLeader 的 vnode 的 Token
|
||||||
- 未指定 AssignedLeader时,该列显示 NULL
|
- 未指定 AssignedLeader时,该列显示 NULL
|
||||||
|
|
||||||
### 最佳实践
|
### 最佳实践
|
||||||
|
|
|
@ -4,7 +4,7 @@ title: 运行监控
|
||||||
toc_max_heading_level: 4
|
toc_max_heading_level: 4
|
||||||
---
|
---
|
||||||
|
|
||||||
为了确保集群稳定运行,TDengine 集成了多种监控指标收集机制,并通 过taosKeeper 进行汇总。taosKeeper负责接收这些数据,并将其写入一个独立的 TDengine 实例中,该实例可以与被监控的 TDengine 集群保持独立。TDengine 中的两个核心组件 taosd (数据库引擎) 和 taosX (数据接入平台)都通过相同的监控架构来实现对其运行时的监控,但各自的监控指标设计有所不同。
|
为了确保集群稳定运行,TDengine 集成了多种监控指标收集机制,并通过 taosKeeper 进行汇总。taosKeeper 负责接收这些数据,并将其写入一个独立的 TDengine 实例中,该实例可以与被监控的 TDengine 集群保持独立。TDengine 中的两个核心组件 taosd (数据库引擎)和 taosX (数据接入平台)都通过相同的监控架构来实现对其运行时的监控,但各自的监控指标设计有所不同。
|
||||||
|
|
||||||
至于如何获取和使用这些监控数据,用户可以使用第三方的监测工具比如 Zabbix 来获取这些保存的系统监测数据,进而将 TDengine 的运行状况无缝集成到现有的 IT 监控系统中。也可以使用 TDengine 提供的 TDinsight 插件,使用该插件用户可以通过 Grafana 平台直观地展示和管理这些监控信息,如下图所示。这为用户提供了灵活的监控选项,以满足不同场景下的运维需求。
|
至于如何获取和使用这些监控数据,用户可以使用第三方的监测工具比如 Zabbix 来获取这些保存的系统监测数据,进而将 TDengine 的运行状况无缝集成到现有的 IT 监控系统中。也可以使用 TDengine 提供的 TDinsight 插件,使用该插件用户可以通过 Grafana 平台直观地展示和管理这些监控信息,如下图所示。这为用户提供了灵活的监控选项,以满足不同场景下的运维需求。
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ taosKeeper 的配置文件默认位于 `/etc/taos/taoskeeper.toml`。 详细配
|
||||||
|
|
||||||
通过集成 Grafana 和 TDengine 数据源插件,TDinsight 能够读取 taosKeeper 收集的监控数据。这使得用户可以在 Grafana 平台上直观地查看 TDengine 集群的状态、节点信息、读写请求以及资源使用情况等关键指标,实现数据的可视化展示。
|
通过集成 Grafana 和 TDengine 数据源插件,TDinsight 能够读取 taosKeeper 收集的监控数据。这使得用户可以在 Grafana 平台上直观地查看 TDengine 集群的状态、节点信息、读写请求以及资源使用情况等关键指标,实现数据的可视化展示。
|
||||||
|
|
||||||
以下是TDinsight 的详细使用说明,以帮助你充分利用这一强大工具。
|
以下是 TDinsight 的详细使用说明,以帮助你充分利用这一强大工具。
|
||||||
|
|
||||||
#### 前置条件
|
#### 前置条件
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@ taosKeeper 的配置文件默认位于 `/etc/taos/taoskeeper.toml`。 详细配
|
||||||
|
|
||||||
#### 导入仪表盘
|
#### 导入仪表盘
|
||||||
|
|
||||||
TDengine 数据源插件已提交至 Grafana 官网,如何安装 TDengine 数据源插件和配置数据源请参考:[安装 Grafana Plugin 并配置数据源](../../third-party/visual/grafana/#安装-grafana-plugin-并配置数据源)。完成插件的安装和数据源的创建后,可以进行 TDinsight 仪表盘的导入。
|
TDengine 数据源插件已提交至 Grafana 官网,如何安装 TDengine 数据源插件和配置数据源请参考 [安装 Grafana Plugin 并配置数据源](../../third-party/visual/grafana/#安装-grafana-plugin-并配置数据源)。完成插件的安装和数据源的创建后,可以进行 TDinsight 仪表盘的导入。
|
||||||
|
|
||||||
在 Grafana 的 “Home” -> “Dashboards” 页面,点击位于右上角的 “New” -> “import” 按钮,即可进入 Dashboard 的导入页面,它支持以下两种导入方式。
|
在 Grafana 的 “Home” -> “Dashboards” 页面,点击位于右上角的 “New” -> “import” 按钮,即可进入 Dashboard 的导入页面,它支持以下两种导入方式。
|
||||||
- Dashboard ID:18180。
|
- Dashboard ID:18180。
|
||||||
|
|
|
@ -4,7 +4,7 @@ title: 可视化管理工具
|
||||||
toc_max_heading_level: 4
|
toc_max_heading_level: 4
|
||||||
---
|
---
|
||||||
|
|
||||||
为方便用户更高效地使用和管理 TDengine,TDengine 3.0 版本推出了一个全新的可视化组件—taosExplorer。这个组件旨在帮助用户在不熟悉 SQL 的情况下,也能轻松管理 TDengine 集群。通过 taosExplorer,用户可以轻松查看 TDengine 的运行状态、浏览数据、配置数据源、实现流计算和数据订阅等功能。此外,用户还可以利用taosExplorer 进行数据的备份、复制和同步操作,以及配置用户的各种访问权限。这些功能极大地简化了数据库的使用过程,提高了用户体验。
|
为方便用户更高效地使用和管理 TDengine,TDengine 3.0 版本推出了一个全新的可视化组件 taosExplorer。这个组件旨在帮助用户在不熟悉 SQL 的情况下,也能轻松管理 TDengine 集群。通过 taosExplorer,用户可以轻松查看 TDengine 的运行状态、浏览数据、配置数据源、实现流计算和数据订阅等功能。此外,用户还可以利用 taosExplorer 进行数据的备份、复制和同步操作,以及配置用户的各种访问权限。这些功能极大地简化了数据库的使用过程,提高了用户体验。
|
||||||
|
|
||||||
本节介绍可视化管理的基本功能。
|
本节介绍可视化管理的基本功能。
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ toc_max_heading_level: 4
|
||||||
|
|
||||||
## 数据浏览器
|
## 数据浏览器
|
||||||
|
|
||||||
点击功能列表的“数据浏览器”入口,在“数据浏览器”中可以创建和删除数据库、创建和删除超级表和子表,执行SQL语句,查看SQL语句的执行结果。此外,超级管理员还有对数据库的管理权限,其他用户不提供该功能。如下图所示:
|
点击功能列表的“数据浏览器”入口,在“数据浏览器”中可以创建和删除数据库、创建和删除超级表和子表,执行 SQL 语句,查看 SQL 语句的执行结果。此外,超级管理员还有对数据库的管理权限,其他用户不提供该功能。如下图所示:
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@ toc_max_heading_level: 4
|
||||||
|
|
||||||
下面通过创建数据库,来熟悉数据浏览器页面的功能和操作,接下来看创建数据库的两种方式:
|
下面通过创建数据库,来熟悉数据浏览器页面的功能和操作,接下来看创建数据库的两种方式:
|
||||||
|
|
||||||
1. 通过点击图中的 + 号,跳转到创建数据数库页面,点击 创建 按钮,如下图:
|
1. 通过点击图中的 + 号,跳转到创建数据数库页面,点击“创建”按钮,如下图:
|
||||||
|
|
||||||
第一步 点击 + 号;
|
第一步 点击 + 号;
|
||||||

|

|
||||||
|
@ -50,7 +50,7 @@ toc_max_heading_level: 4
|
||||||
弟三步 点击“创建”按钮之后,如下图左边出现数据库名称则创建数据库成功。
|
弟三步 点击“创建”按钮之后,如下图左边出现数据库名称则创建数据库成功。
|
||||||

|

|
||||||
|
|
||||||
2. 通过在 Sql 编辑器中数据 sql 语句,点击 执行 按钮,如下图:
|
2. 通过在 SQL 编辑器中数据 sql 语句,点击 执行 按钮,如下图:
|
||||||
|
|
||||||
第一步 输入 sql 语句;
|
第一步 输入 sql 语句;
|
||||||

|

|
||||||
|
@ -201,11 +201,11 @@ toc_max_heading_level: 4
|
||||||
## 工具
|
## 工具
|
||||||
|
|
||||||
通过 “工具” 页面,用户可以了解如下 TDengine 周边工具的使用方法。
|
通过 “工具” 页面,用户可以了解如下 TDengine 周边工具的使用方法。
|
||||||
- TDengine CLI。
|
- TDengine CLI
|
||||||
- taosBenchmark。
|
- taosBenchmark
|
||||||
- taosdump。
|
- taosdump
|
||||||
- TDengine 与 BI 工具的集成,例如 Google Data Studio、Power BI、永洪 BI 等。
|
- TDengine 与 BI 工具的集成,例如 Google Data Studio、Power BI、永洪 BI 等
|
||||||
- TDengine 与 Grafana、Seeq 的集成。
|
- TDengine 与 Grafana、Seeq 的集成
|
||||||
|
|
||||||
## 系统管理
|
## 系统管理
|
||||||
|
|
||||||
|
@ -238,7 +238,7 @@ toc_max_heading_level: 4
|
||||||
### 慢 SQL
|
### 慢 SQL
|
||||||
点击“系统管理”后,点击“慢 SQL”标签页,可以查看慢 SQL 执行语句日志统计与明细。
|
点击“系统管理”后,点击“慢 SQL”标签页,可以查看慢 SQL 执行语句日志统计与明细。
|
||||||
|
|
||||||
- 慢 SQL 明细:默认展示的是开始执行时间是一天内和执行耗时大于等于10秒的数据
|
- 慢 SQL 明细:默认展示的是开始执行时间是一天内和执行耗时大于等于 10 秒的数据
|
||||||

|

|
||||||
- 慢 SQL 统计:默认展示所有的数据,可根据开始执行时间进行过滤
|
- 慢 SQL 统计:默认展示所有的数据,可根据开始执行时间进行过滤
|
||||||

|

|
||||||
|
|
|
@ -8,9 +8,7 @@ toc_max_heading_level: 4
|
||||||
|
|
||||||
# 1. 基于 taosdump 进行数据备份恢复
|
# 1. 基于 taosdump 进行数据备份恢复
|
||||||
|
|
||||||
taosdump 是一个开源工具,用于支持从运行中的 TDengine 集群备份数据并将备份的数据恢复到相同或另一个正在运行的 TDengine
|
taosdump 是一个开源工具,用于支持从运行中的 TDengine 集群备份数据并将备份的数据恢复到相同或另一个正在运行的 TDengine 集群中。taosdump 可以将数据库作为逻辑数据单元进行备份,也可以对数据库中指定时间段内的数据记录进行备份。在使用 taosdump 时,可以指定数据备份的目录路径。如果不指定目录路径,taosdump 将默认将数据备份到当前目录。
|
||||||
集群中。taosdump 可以将数据库作为逻辑数据单元进行备份,也可以对数据库中指定时间段内的数据记录进行备份。在使用taosdump
|
|
||||||
时,可以指定数据备份的目录路径。如果不指定目录路径,taosdump 将默认将数据备份到当前目录。
|
|
||||||
|
|
||||||
以下为 taosdump 执行数据备份的使用示例。
|
以下为 taosdump 执行数据备份的使用示例。
|
||||||
|
|
||||||
|
@ -18,14 +16,11 @@ taosdump 是一个开源工具,用于支持从运行中的 TDengine 集群备
|
||||||
taosdump -h localhost -P 6030 -D dbname -o /file/path
|
taosdump -h localhost -P 6030 -D dbname -o /file/path
|
||||||
```
|
```
|
||||||
|
|
||||||
执行上述命令后,taosdump 会连接 localhost:6030 所在的 TDengine 集群,查询数据库 dbname 中的所有数据,并将数据备份到 /f
|
执行上述命令后,taosdump 会连接 localhost:6030 所在的 TDengine 集群,查询数据库 dbname 中的所有数据,并将数据备份到 /file/path 下。
|
||||||
ile/path 下。
|
|
||||||
|
|
||||||
在使用 taosdump 时,如果指定的存储路径已经包含数据文件,taosdump
|
在使用 taosdump 时,如果指定的存储路径已经包含数据文件,taosdump 会提示用户并立即退出,以避免数据被覆盖。这意味着同一存储路径只能用于一次备份。如果你看到相关提示,请谨慎操作,以免误操作导致数据丢失。
|
||||||
会提示用户并立即退出,以避免数据被覆盖。这意味着同一存储路径只能用于一次备份。如果你看到相关提示,请谨慎操作,以免误操作导致数据丢失。
|
|
||||||
|
|
||||||
要将本地指定文件路径中的数据文件恢复到正在运行的 TDengine 集群中,可以通过指定命令行参数和数据文件所在路径来执行 taosdump
|
要将本地指定文件路径中的数据文件恢复到正在运行的 TDengine 集群中,可以通过指定命令行参数和数据文件所在路径来执行 taosdump 命令。以下为 taosdump 执行数据恢复的示例代码。
|
||||||
命令。以下为 taosdump 执行数据恢复的示例代码。
|
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
taosdump -i /file/path -h localhost -P 6030
|
taosdump -i /file/path -h localhost -P 6030
|
||||||
|
@ -76,6 +71,17 @@ taosExplorer 服务页面中,进入“系统管理 - 备份”页面,在“
|
||||||
8. 备份文件大小:备份文件的大小限制。当备份文件大小达到此限制时,会自动创建新的备份文件。
|
8. 备份文件大小:备份文件的大小限制。当备份文件大小达到此限制时,会自动创建新的备份文件。
|
||||||
9. 文件压缩等级:备份文件的压缩等级。支持:最快速度、最佳压缩比、兼具速度和压缩比。
|
9. 文件压缩等级:备份文件的压缩等级。支持:最快速度、最佳压缩比、兼具速度和压缩比。
|
||||||
|
|
||||||
|
用户可以通过开启 S3 转储,将备份文件上传至 S3 存储服务上。开启 S3 转储,需要填写以下信息:
|
||||||
|
|
||||||
|
1. S3 节点:S3 节点的地址。
|
||||||
|
2. 访问密钥 ID:访问密钥 ID。
|
||||||
|
3. 访问密钥:访问密钥。
|
||||||
|
4. 存储桶:存储桶名称。
|
||||||
|
5. 区域:存储桶所在的区域。
|
||||||
|
6. 对象前缀:备份文件的对象前缀,类似于 S3 上的目录。
|
||||||
|
7. 本地备份文件的保留时长:本地备份的保留时间,所有早于`当前时间 - backup_retention_period`的文件都需要上传到 S3。
|
||||||
|
8. 本地备份文件的保留个数:本地备份文件的保留个数,本地只保留最新的`backup_retention_size`个备份文件。
|
||||||
|
|
||||||
创建成功后,备份计划会开始按照配置的参数运行。在“备份计划”下的列表中,可以查看已创建的备份计划。
|
创建成功后,备份计划会开始按照配置的参数运行。在“备份计划”下的列表中,可以查看已创建的备份计划。
|
||||||
|
|
||||||
备份计划支持以下操作:
|
备份计划支持以下操作:
|
||||||
|
|
|
@ -10,7 +10,7 @@ toc_max_heading_level: 4
|
||||||
|
|
||||||
TDengine 支持 WAL 机制,实现数据的容错能力,保证数据的高可靠。TDengine 接收到应用程序的请求数据包时,会先将请求的原始数据包写入数据库日志文件,等数据成功写入数据库数据文件后,再删除相应的 WAL。这样保证了 TDengine 能够在断电等因素导致的服务重启时,从数据库日志文件中恢复数据,避免数据丢失。涉及的配置参数有如下两个:
|
TDengine 支持 WAL 机制,实现数据的容错能力,保证数据的高可靠。TDengine 接收到应用程序的请求数据包时,会先将请求的原始数据包写入数据库日志文件,等数据成功写入数据库数据文件后,再删除相应的 WAL。这样保证了 TDengine 能够在断电等因素导致的服务重启时,从数据库日志文件中恢复数据,避免数据丢失。涉及的配置参数有如下两个:
|
||||||
|
|
||||||
- wal_level :WAL 级别,1 表示写 WAL,但不执行 fsync ; 2 表示写 WAL,而且执行 fsync。默认值为 1。
|
- wal_level:WAL 级别,1 表示写 WAL,但不执行 fsync;2 表示写 WAL,而且执行 fsync。默认值为 1。
|
||||||
- wal_fsync_period:当 wal_level 设置为 2 时,执行 fsync 的周期;当 wal_fsync_period 设置为 0 时,表示每次写入,立即执行 fsync。
|
- wal_fsync_period:当 wal_level 设置为 2 时,执行 fsync 的周期;当 wal_fsync_period 设置为 0 时,表示每次写入,立即执行 fsync。
|
||||||
|
|
||||||
如果要 100% 保证数据不丢失,则需要将 wal_level 设置为 2,wal_fsync_period 设置为 0。这时写入速度将会下降。但如果应用程序侧启动的写数据的线程数达到一定的数量(超过 50),那么写入数据的性能也会很不错,只会比 wal_fsync_period 设置为 3000ms 下降 30% 左右。
|
如果要 100% 保证数据不丢失,则需要将 wal_level 设置为 2,wal_fsync_period 设置为 0。这时写入速度将会下降。但如果应用程序侧启动的写数据的线程数达到一定的数量(超过 50),那么写入数据的性能也会很不错,只会比 wal_fsync_period 设置为 3000ms 下降 30% 左右。
|
||||||
|
@ -27,10 +27,8 @@ TDengine 支持 WAL 机制,实现数据的容错能力,保证数据的高可
|
||||||
|
|
||||||
- 第 3 步,访问 TDengine 集群 B,创建一个与集群 A 中数据库 db1 参数配置相同的数据库 db2。
|
- 第 3 步,访问 TDengine 集群 B,创建一个与集群 A 中数据库 db1 参数配置相同的数据库 db2。
|
||||||
|
|
||||||
- 第 4 步,通过 Web 浏览器访问集群 B 的 taosExplorer 服务,在 “数据浏览器” 页面找到 db2,在 “查看数据库配置” 选项中可以获取该数据库的 DSN,例如 taos+ws://root:taosdata@clusterB:6041/db2
|
- 第 4 步,通过 Web 浏览器访问集群 B 的 taosExplorer 服务,在 “数据浏览器” 页面找到 db2,在 “查看数据库配置” 选项中可以获取该数据库的 DSN,例如 `taos+ws://root:taosdata@clusterB:6041/db2`
|
||||||
|
|
||||||
- 第 5 步,在 taosExplorer 服务的“系统管理 - 数据同步”页面新增一个数据同步任务,在任务配置信息中填写需要同步的数据库 db1 和目标数据库 db2 的 DSN,完成创建任务后即可启动数据同步。
|
- 第 5 步,在 taosExplorer 服务的“系统管理 - 数据同步”页面新增一个数据同步任务,在任务配置信息中填写需要同步的数据库 db1 和目标数据库 db2 的 DSN,完成创建任务后即可启动数据同步。
|
||||||
|
|
||||||
- 第 6 步,访问集群 B,可以看到集群 B 中的数据库 db2 源源不断写入来自集群 A 数据库 db1 的数据,直至两个集群的数据库数据量基本保持一致。至此,一个简单的基于
|
- 第 6 步,访问集群 B,可以看到集群 B 中的数据库 db2 源源不断写入来自集群 A 数据库 db1 的数据,直至两个集群的数据库数据量基本保持一致。至此,一个简单的基于 TDengine Enterprise 的数据灾备体系搭建完成。
|
||||||
|
|
||||||
TDengine Enterprise 的数据灾备体系搭建完成。
|
|
|
@ -5,10 +5,10 @@ toc_max_heading_level: 4
|
||||||
---
|
---
|
||||||
|
|
||||||
本节介绍 TDengine Enterprise 特有的多级存储功能,其作用是将较近的热度较高的数据存储在高速介质上,而时间久远热度很低的数据存储在低成本介质上,达成了以下目标:
|
本节介绍 TDengine Enterprise 特有的多级存储功能,其作用是将较近的热度较高的数据存储在高速介质上,而时间久远热度很低的数据存储在低成本介质上,达成了以下目标:
|
||||||
- 降低存储成本 -- 将数据分级存储后,海量极冷数据存入廉价存储介质带来显著经济性
|
- **降低存储成本**:将数据分级存储后,海量极冷数据存入廉价存储介质带来显著经济性
|
||||||
- 提升写入性能 -- 得益于每级存储可支持多个挂载点,WAL 预写日志也支持 0 级的多挂载点并行写入,极大提升写入性能(实际场景测得支持持续写入每秒 3 亿测点以上),在机械硬盘上可获得极高磁盘 IO 吞吐(实测可达 2GB/s)
|
- **提升写入性能**:得益于每级存储可支持多个挂载点,WAL 预写日志也支持 0 级的多挂载点并行写入,极大提升写入性能(实际场景测得支持持续写入每秒 3 亿测点以上),在机械硬盘上可获得极高磁盘 IO 吞吐(实测可达 2GB/s)
|
||||||
- 方便维护 -- 配置好各级存储挂载点后,系统数据迁移等工作,无需人工干预;存储扩容更灵活、方便
|
- **方便维护**:配置好各级存储挂载点后,系统数据迁移等工作,无需人工干预;存储扩容更灵活、方便
|
||||||
- 对 SQL 透明 -- 无论查询的数据是否跨级,一条 SQL 可返回所有数据,简单高效
|
- **对 SQL 透明**:无论查询的数据是否跨级,一条 SQL 可返回所有数据,简单高效
|
||||||
|
|
||||||
多级存储所涉及的各层存储介质都是本地存储设备。除了本地存储设备之外,TDengine Enterprise 还支持使用对象存储(S3),将最冷的一批数据保存在最廉价的介质上,以进一步降低存储成本,并在必要时仍然可以进行查询,且数据存储在哪里也对 SQL 透明。支持对象存储在 3.3.0.0 版本中首次发布,建议使用最新版本。
|
多级存储所涉及的各层存储介质都是本地存储设备。除了本地存储设备之外,TDengine Enterprise 还支持使用对象存储(S3),将最冷的一批数据保存在最廉价的介质上,以进一步降低存储成本,并在必要时仍然可以进行查询,且数据存储在哪里也对 SQL 透明。支持对象存储在 3.3.0.0 版本中首次发布,建议使用最新版本。
|
||||||
|
|
||||||
|
@ -26,9 +26,11 @@ dataDir [path] <level> <primary>
|
||||||
```
|
```
|
||||||
|
|
||||||
- path: 挂载点的文件夹路径。
|
- path: 挂载点的文件夹路径。
|
||||||
- level: 介质存储等级,取值为 0,1,2。 0 级存储最新的数据,1 级存储次新的数据,2 级存储最老的数据,省略默认为 0。 各级存储之间的数据流向:0 级存储 -> 1 级存储 -> 2 级存储。 同一存储等级可挂载多个硬盘,同一存储等级上的数据文件分布在该存储等级的所有硬盘上。 需要说明的是,数据在不同级别的存储介质上的移动,是由系统自动完成的,用户无需干预。
|
- level:介质存储等级,取值为 0、1、2。 0 级存储最新的数据,1 级存储次新的数据,2 级存储最老的数据,省略默认为 0。各级存储之间的数据流向:0 级存储 -> 1 级存储 -> 2 级存储。 同一存储等级可挂载多个硬盘,同一存储等级上的数据文件分布在该存储等级的所有硬盘上。需要说明的是,数据在不同级别的存储介质上的移动,是由系统自动完成的,用户无需干预。
|
||||||
- primary: 是否为主挂载点,0(否)或 1(是),省略默认为 1。
|
- primary:是否为主挂载点,0(否)或 1(是),省略默认为 1。
|
||||||
|
|
||||||
在配置中,只允许一个主挂载点的存在(level=0,primary=1),例如采用如下的配置方式:
|
在配置中,只允许一个主挂载点的存在(level=0,primary=1),例如采用如下的配置方式:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
dataDir /mnt/data1 0 1
|
dataDir /mnt/data1 0 1
|
||||||
dataDir /mnt/data2 0 0
|
dataDir /mnt/data2 0 0
|
||||||
|
@ -38,7 +40,8 @@ dataDir /mnt/data5 2 0
|
||||||
dataDir /mnt/data6 2 0
|
dataDir /mnt/data6 2 0
|
||||||
```
|
```
|
||||||
|
|
||||||
**注意** 1. 多级存储不允许跨级配置,合法的配置方案有:仅 0 级,仅 0 级+ 1 级,以及 0 级+ 1 级+ 2 级。而不允许只配置 level=0 和 level=2,而不配置 level=1。
|
**注意**
|
||||||
|
1. 多级存储不允许跨级配置,合法的配置方案有:仅 0 级、仅 0 级 + 1 级、以及 0 级 + 1 级 + 2 级。而不允许只配置 level=0 和 level=2,而不配置 level=1。
|
||||||
2. 禁止手动移除使用中的挂载盘,挂载盘目前不支持非本地的网络盘。
|
2. 禁止手动移除使用中的挂载盘,挂载盘目前不支持非本地的网络盘。
|
||||||
|
|
||||||
### 负载均衡
|
### 负载均衡
|
||||||
|
@ -74,13 +77,13 @@ dataDir /mnt/data6 2 0
|
||||||
|
|
||||||
| 参数名称 | 参数含义 |
|
| 参数名称 | 参数含义 |
|
||||||
|:---------------------|:-----------------------------------------------|
|
|:---------------------|:-----------------------------------------------|
|
||||||
| s3EndPoint | 用户所在地域的 COS 服务域名,支持 http 和 https,bucket 的区域需要与 endpoint 的保持一致,否则无法访问。 |
|
| s3EndPoint | 用户所在地域的 COS 服务域名,支持 http 和 https,bucket 的区域需要与 endpoint 的保持一致,否则无法访问 |
|
||||||
| s3AccessKey | 冒号分隔的用户 SecretId:SecretKey。例如:AKIDsQmwsfKxTo2A6nGVXZN0UlofKn6JRRSJ:lIdoy99ygEacU7iHfogaN2Xq0yumSm1E |
|
| s3AccessKey | 冒号分隔的用户 SecretId:SecretKey。例如:AKIDsQmwsfKxTo2A6nGVXZN0UlofKn6JRRSJ:lIdoy99ygEacU7iHfogaN2Xq0yumSm1E |
|
||||||
| s3BucketName | 存储桶名称,减号后面是用户注册 COS 服务的 AppId。其中 AppId 是 COS 特有,AWS 和阿里云都没有,配置时需要作为 bucket name 的一部分,使用减号分隔。参数值均为字符串类型,但不需要引号。例如:test0711-1309024725 |
|
| s3BucketName | 存储桶名称,减号后面是用户注册 COS 服务的 AppId。其中 AppId 是 COS 特有,AWS 和阿里云都没有,配置时需要作为 bucket name 的一部分,使用减号分隔。参数值均为字符串类型,但不需要引号。例如:test0711-1309024725 |
|
||||||
| s3UploadDelaySec | data 文件持续多长时间不再变动后上传至 s3,单位:秒。最小值:1;最大值:2592000(30天),默认值 60 秒 |
|
| s3UploadDelaySec | data 文件持续多长时间不再变动后上传至 s3,单位:秒。最小值:1;最大值:2592000(30天),默认值 60 秒 |
|
||||||
| s3PageCacheSize | S3 page cache 缓存页数目,单位:页。最小值:4;最大值:1024*1024*1024。 ,默认值 4096|
|
| s3PageCacheSize | S3 page cache 缓存页数目,单位:页。最小值:4;最大值:1024*1024*1024。 ,默认值 4096|
|
||||||
| s3MigrateIntervalSec | 本地数据文件自动上传 S3 的触发周期,单位为秒。最小值:600;最大值:100000。默认值 3600 |
|
| s3MigrateIntervalSec | 本地数据文件自动上传 S3 的触发周期,单位为秒。最小值:600;最大值:100000。默认值 3600 |
|
||||||
| s3MigrateEnabled | 是否自动进行 S3 迁移,默认值为 0,表示关闭自动 S3 迁移,可配置为 1。 |
|
| s3MigrateEnabled | 是否自动进行 S3 迁移,默认值为 0,表示关闭自动 S3 迁移,可配置为 1 |
|
||||||
|
|
||||||
#### 检查配置参数可用性
|
#### 检查配置参数可用性
|
||||||
|
|
||||||
|
@ -124,8 +127,8 @@ s3migrate database <db_name>;
|
||||||
|
|
||||||
当 TSDB 时序数据超过 `s3_keeplocal` 参数指定的时间,相关的数据文件会被切分成多个文件块,每个文件块的默认大小是 512M 字节 (`s3_chunkpages * tsdb_pagesize`)。除了最后一个文件块保留在本地文件系统外,其余的文件块会被上传到对象存储服务。
|
当 TSDB 时序数据超过 `s3_keeplocal` 参数指定的时间,相关的数据文件会被切分成多个文件块,每个文件块的默认大小是 512M 字节 (`s3_chunkpages * tsdb_pagesize`)。除了最后一个文件块保留在本地文件系统外,其余的文件块会被上传到对象存储服务。
|
||||||
|
|
||||||
```math
|
```text
|
||||||
上传次数 = 数据文件大小 / (s3_chunkpages * tsdb_pagesize) - 1
|
上传次数 = 数据文件大小 / (s3_chunkpages * tsdb_pagesize) - 1
|
||||||
```
|
```
|
||||||
|
|
||||||
在创建数据库时,可以通过 `s3_chunkpages` 参数调整每个文件块的大小,从而控制每个数据文件的上传次数。
|
在创建数据库时,可以通过 `s3_chunkpages` 参数调整每个文件块的大小,从而控制每个数据文件的上传次数。
|
||||||
|
@ -138,7 +141,7 @@ s3migrate database <db_name>;
|
||||||
|
|
||||||
相邻的多个数据页会作为一个数据块从对象存储下载一次,以减少从对象存储下载的次数。每个数据页的大小,在创建数据库时,通过 `tsdb_pagesize` 参数指定,默认 4K 字节。
|
相邻的多个数据页会作为一个数据块从对象存储下载一次,以减少从对象存储下载的次数。每个数据页的大小,在创建数据库时,通过 `tsdb_pagesize` 参数指定,默认 4K 字节。
|
||||||
|
|
||||||
```math
|
```text
|
||||||
下载次数 = 查询需要的数据块数量 - 已缓存的数据块数量
|
下载次数 = 查询需要的数据块数量 - 已缓存的数据块数量
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -17,11 +17,14 @@ create user user_name pass'password' [sysinfo {1|0}] [createdb {1|0}]
|
||||||
|
|
||||||
相关参数说明如下。
|
相关参数说明如下。
|
||||||
- user_name:用户名最长不超过 23 个字节。
|
- user_name:用户名最长不超过 23 个字节。
|
||||||
- password:密码长度必须为 8 到 16 位,并且至少包含大写字母、小写字母、数字、特殊字符中的三类。特殊字符包括 `! @ # $ % ^ & * ( ) - _ + = [ ] { } : ; > < ? | ~ , .`。(始自 3.3.5.0 版本)
|
- password:密码长度必须为 8 到 255 个字节。密码至少包含大写字母、小写字母、数字、特殊字符中的三类。特殊字符包括 `! @ # $ % ^ & * ( ) - _ + = [ ] { } : ; > < ? | ~ , .`(始自 v3.3.5.0),可以通过在 taos.cfg 中添加参数 `enableStrongPassword 0` 关闭此强制要求,或者通过如下 SQL 关闭(始自 v3.3.6.0)。
|
||||||
- sysinfo :用户是否可以查看系统信息。1 表示可以查看,0 表示不可以查看。系统信息包括服务端配置信息、服务端各种节点信息,如 dnode、查询节点(qnode)等,以及与存储相关的信息等。默认为可以查看系统信息。
|
```sql
|
||||||
- createdb:用户是否可以创建数据库。1 表示可以创建,0 表示不可以创建。缺省值为 0。// 从 TDengine 企业版 3.3.2.0 开始支持
|
alter all dnode 'EnableStrongPassword' '0'
|
||||||
|
```
|
||||||
|
- sysinfo:用户是否可以查看系统信息。1 表示可以查看,0 表示不可以查看。系统信息包括服务端配置信息、服务端各种节点信息,如 dnode、查询节点(qnode)等,以及与存储相关的信息等。默认为可以查看系统信息。
|
||||||
|
- createdb:用户是否可以创建数据库。1 表示可以创建,0 表示不可以创建。缺省值为 0。从企业版 v3.3.2.0 开始支持。
|
||||||
|
|
||||||
如下 SQL 可以创建密码为 abc123!@# 且可以查看系统信息的用户 test。
|
如下 SQL 可以创建密码为 `abc123!@#` 且可以查看系统信息的用户 test。
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
create user test pass 'abc123!@#' sysinfo 1
|
create user test pass 'abc123!@#' sysinfo 1
|
||||||
|
@ -55,8 +58,8 @@ alter_user_clause: {
|
||||||
相关参数说明如下。
|
相关参数说明如下。
|
||||||
- pass:修改用户密码。
|
- pass:修改用户密码。
|
||||||
- enable:是否启用用户。1 表示启用此用户,0 表示禁用此用户。
|
- enable:是否启用用户。1 表示启用此用户,0 表示禁用此用户。
|
||||||
- sysinfo :用户是否可查看系统信息。1 表示可以查看系统信息,0 表示不可以查看系统信息
|
- sysinfo:用户是否可查看系统信息。1 表示可以查看系统信息,0 表示不可以查看系统信息
|
||||||
- createdb:用户是否可创建数据库。1 表示可以创建数据库,0 表示不可以创建数据库。// 从 TDengine 企业版 3.3.2.0 开始支持
|
- createdb:用户是否可创建数据库。1 表示可以创建数据库,0 表示不可以创建数据库。从企业版 v3.3.2.0 开始支持。
|
||||||
|
|
||||||
如下 SQL 禁用 test 用户。
|
如下 SQL 禁用 test 用户。
|
||||||
```sql
|
```sql
|
||||||
|
@ -76,7 +79,7 @@ drop user user_name
|
||||||
|
|
||||||
### 库和表的授权
|
### 库和表的授权
|
||||||
|
|
||||||
在 TDengine 中,库和表的权限分为 read (读)和 write (写)两种。这些权限可以单独授予,也可以同时授予用户。
|
在 TDengine 中,库和表的权限分为 read 和 write 两种。这些权限可以单独授予,也可以同时授予用户。
|
||||||
|
|
||||||
- read 权限:拥有 read 权限的用户仅能查询库或表中的数据,而无法对数据进行修改或删除。这种权限适用于需要访问数据但不需要对数据进行写入操作的场景,如数据分析师、报表生成器等。
|
- read 权限:拥有 read 权限的用户仅能查询库或表中的数据,而无法对数据进行修改或删除。这种权限适用于需要访问数据但不需要对数据进行写入操作的场景,如数据分析师、报表生成器等。
|
||||||
- write 权限:拥有 write 权限的用户可以向库或表中写入数据。这种权限适用于需要对数据进行写入操作的场景,如数据采集器、数据处理器等。如果只拥有 write 权限而没有 read 权限,则只能写入数据但不能查询数据。
|
- write 权限:拥有 write 权限的用户可以向库或表中写入数据。这种权限适用于需要对数据进行写入操作的场景,如数据采集器、数据处理器等。如果只拥有 write 权限而没有 read 权限,则只能写入数据但不能查询数据。
|
||||||
|
@ -101,10 +104,11 @@ resources :{
|
||||||
```
|
```
|
||||||
|
|
||||||
相关参数说明如下。
|
相关参数说明如下。
|
||||||
- resources :可以访问的库或表。. 之前为数据库名称,. 之后为表名称。dbname.tbname 的意思是名为 dbname 的数据库中的 tbname 表必须为普通表或超级表。dbname.* 的意思是名为 dbname 的数据库中的所有表。*.* 的意思是所有数据库中的所有表。
|
- resources:可以访问的库或表。`.` 之前为数据库名称,`.` 之后为表名称。`dbname.tbname` 的意思是名为 dbname 的数据库中的 tbname 表必须为普通表或超级表。`dbname.*` 的意思是名为 dbname 的数据库中的所有表。`*.*` 的意思是所有数据库中的所有表。
|
||||||
- tag_f ilter:超级表的过滤条件。
|
- tag_filter:超级表的过滤条件。
|
||||||
|
|
||||||
|
上述 SQL 既可以授权一个库、所有库,也可以授权一个库下的普通表或超级表,还可以通过 `dbname.tbname` 和 `with` 子句的组合授权符合过滤条件的一张超级表下的所有子表。
|
||||||
|
|
||||||
上述 SQL 既可以授权一个库、所有库,也可以授权一个库下的普通表或超级表,还可以通过 dbname.tbname 和 with 子句的组合授权符合过滤条件的一张超级表下的所有子表。
|
|
||||||
如下 SQL 将数据库 power 的 read 权限授权给用户 test。
|
如下 SQL 将数据库 power 的 read 权限授权给用户 test。
|
||||||
```sql
|
```sql
|
||||||
grant read on power to test
|
grant read on power to test
|
||||||
|
|
|
@ -28,24 +28,24 @@ ALTER USER TEST DROP HOST HOST_NAME1
|
||||||
```
|
```
|
||||||
说明
|
说明
|
||||||
- 开源版和企业版本都能添加成功,且可以查询到,但是开源版本不会对 IP 做任何限制。
|
- 开源版和企业版本都能添加成功,且可以查询到,但是开源版本不会对 IP 做任何限制。
|
||||||
- create user u_write pass 'taosdata1' host 'iprange1','iprange2', 可以一次添加多个 iprange, 服务端会做去重,去重的逻辑是需要 iprange 完全一样
|
- `create user u_write pass 'taosdata1' host 'iprange1','iprange2'`,可以一次添加多个 ip range,服务端会做去重,去重的逻辑是需要 ip range 完全一样
|
||||||
- 默认会把 127.0.0.1 添加到白名单列表,且在白名单列表可以查询
|
- 默认会把 `127.0.0.1` 添加到白名单列表,且在白名单列表可以查询
|
||||||
- 集群的节点 IP 集合会自动添加到白名单列表,但是查询不到。
|
- 集群的节点 IP 集合会自动添加到白名单列表,但是查询不到。
|
||||||
- taosadaper 和 taosd 不在一个机器的时候,需要把 taosadaper IP 手动添加到 taosd 白名单列表中
|
- taosadaper 和 taosd 不在一个机器的时候,需要把 taosadaper IP 手动添加到 taosd 白名单列表中
|
||||||
- 集群情况下,各个节点 enableWhiteList 成一样,或者全为 false,或者全为 true, 要不然集群无法启动
|
- 集群情况下,各个节点 enableWhiteList 成一样,或者全为 false,或者全为 true,要不然集群无法启动
|
||||||
- 白名单变更生效时间 1s,不超过 2s, 每次变更对收发性能有些微影响(多一次判断,可以忽略),变更完之后、影响忽略不计, 变更过程中对集群没有影响,对正在访问客户端也没有影响(假设这些客户端的 IP 包含在 white list 内)
|
- 白名单变更生效时间 1s,不超过 2s,每次变更对收发性能有些微影响(多一次判断,可以忽略),变更完之后、影响忽略不计,变更过程中对集群没有影响,对正在访问客户端也没有影响(假设这些客户端的 IP 包含在 white list 内)
|
||||||
- 如果添加两个 ip range, 192.168.1.1/16(假设为 A), 192.168.1.1/24(假设为 B), 严格来说,A 包含了 B,但是考虑情况太复杂,并不会对 A 和 B 做合并
|
- 如果添加两个 ip range,192.168.1.1/16(假设为 A),192.168.1.1/24(假设为 B),严格来说,A 包含了 B,但是考虑情况太复杂,并不会对 A 和 B 做合并
|
||||||
- 要删除的时候,必须严格匹配。 也就是如果添加的是 192.168.1.1/24, 要删除也是 192.168.1.1/24
|
- 要删除的时候,必须严格匹配。 也就是如果添加的是 192.168.1.1/24,要删除也是 192.168.1.1/24
|
||||||
- 只有 root 才有权限对其他用户增删 ip white list
|
- 只有 root 才有权限对其他用户增删 ip white list
|
||||||
- 兼容之前的版本,但是不支持从当前版本回退到之前版本
|
- 兼容之前的版本,但是不支持从当前版本回退到之前版本
|
||||||
- x.x.x.x/32 和 x.x.x.x 属于同一个 iprange, 显示为 x.x.x.x
|
- x.x.x.x/32 和 x.x.x.x 属于同一个 iprange,显示为 x.x.x.x
|
||||||
- 如果客户端拿到的 0.0.0.0/0, 说明没有开启白名单
|
- 如果客户端拿到的 0.0.0.0/0,说明没有开启白名单
|
||||||
- 如果白名单发生了改变, 客户端会在 heartbeat 里检测到。
|
- 如果白名单发生了改变, 客户端会在 heartbeat 里检测到。
|
||||||
- 针对一个 user, 添加的 IP 个数上限是 2048
|
- 针对一个 user,添加的 IP 个数上限是 2048
|
||||||
|
|
||||||
## 审计日志
|
## 审计日志
|
||||||
|
|
||||||
TDengine 先对用户操作进行记录和管理,然后将这些作为审计日志发送给taosKeeper,再由 taosKeeper 保存至任意 TDengine 集群。管理员可通过审计日志进行安全监控、历史追溯。TDengine 的审计日志功能开启和关闭操作非常简单,只须修改TDengine 的配置文件后重启服务。审计日志的配置说明如下。
|
TDengine 先对用户操作进行记录和管理,然后将这些作为审计日志发送给 taosKeeper,再由 taosKeeper 保存至任意 TDengine 集群。管理员可通过审计日志进行安全监控、历史追溯。TDengine 的审计日志功能开启和关闭操作非常简单,只须修改 TDengine 的配置文件后重启服务。审计日志的配置说明如下。
|
||||||
|
|
||||||
### taosd 配置
|
### taosd 配置
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@ TDengine 先对用户操作进行记录和管理,然后将这些作为审计
|
||||||
|
|
||||||
| 参数名称 | 参数含义 |
|
| 参数名称 | 参数含义 |
|
||||||
|:-------------:|:--------------------------------------------------------:|
|
|:-------------:|:--------------------------------------------------------:|
|
||||||
|audit | 是否打开审计日志,默认值为 0。1 为开启,0 为关闭 |
|
|audit | 是否打开审计日志,1 为开启,0 为关闭,默认值为 0。 |
|
||||||
|monitorFqdn | 接收审计日志的 taosKeeper 所在服务器的 FQDN |
|
|monitorFqdn | 接收审计日志的 taosKeeper 所在服务器的 FQDN |
|
||||||
|monitorPort | 接收审计日志的 taosKeeper 服务所用端口 |
|
|monitorPort | 接收审计日志的 taosKeeper 服务所用端口 |
|
||||||
|monitorCompaction | 上报数据时是否进行压缩 |
|
|monitorCompaction | 上报数据时是否进行压缩 |
|
||||||
|
@ -64,7 +64,7 @@ TDengine 先对用户操作进行记录和管理,然后将这些作为审计
|
||||||
|
|
||||||
| 参数名称 | 参数含义 |
|
| 参数名称 | 参数含义 |
|
||||||
|:-------------:|:--------------------------------------------------------:|
|
|:-------------:|:--------------------------------------------------------:|
|
||||||
|auditDB | 用于存放审计日志的数据库的名字,默认值为 "audit" ,taosKeeper 在收到上报的审计日志后会判断该数据库是否存在,如果不存在会自动创建它 |
|
|auditDB | 用于存放审计日志的数据库的名字,默认值为 "audit",taosKeeper 在收到上报的审计日志后会判断该数据库是否存在,如果不存在会自动创建 |
|
||||||
|
|
||||||
### 数据格式
|
### 数据格式
|
||||||
|
|
||||||
|
@ -88,19 +88,19 @@ TDengine 先对用户操作进行记录和管理,然后将这些作为审计
|
||||||
taosKeeper 会依据上报的审计数据在相应的数据库中自动建立超级表用于存储数据。该超级表的定义如下
|
taosKeeper 会依据上报的审计数据在相应的数据库中自动建立超级表用于存储数据。该超级表的定义如下
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
CREATE STABLE operations(ts timestamp, details VARCHAR(64000), User VARCHAR(25), Operation VARCHAR(20), db VARCHAR(65), resource VARCHAR(193), client_add(25)) TAGS (clusterID VARCHAR(64) );
|
create stable operations(ts timestamp, details varchar(64000), user varchar(25), operation varchar(20), db varchar(65), resource varchar(193), client_add(25)) tags (clusterID varchar(64) );
|
||||||
```
|
```
|
||||||
|
|
||||||
其中:
|
其中
|
||||||
1. db为操作涉及的database,resource为操作涉及的资源。
|
1. db 为操作涉及的 database,resource 为操作涉及的资源。
|
||||||
2. User 和 Operation 为数据列,表示哪个用户在该对象上进行了什么操作
|
2. user 和 operation 为数据列,表示哪个用户在该对象上进行了什么操作
|
||||||
3. timestamp 为时间戳列,表示操作发生时的时间
|
3. timestamp 为时间戳列,表示操作发生时的时间
|
||||||
4. details 为该操作的一些补充细节,在大多数操作下是所执行的操作的SQL语句。
|
4. details 为该操作的一些补充细节,在大多数操作下是所执行的操作的 SQL 语句。
|
||||||
5. client_add为客户端地址,包括ip和端口
|
5. client_add 为客户端地址,包括 ip 和端口
|
||||||
|
|
||||||
### 操作列表
|
### 操作列表
|
||||||
|
|
||||||
目前审计日志中所记录的操作列表以及每个操作中各字段的含义如下表(注:因为每个操作的实加者即 user 字段、时间戳字段和client_add在所有操作中的含义相同,下表不包含)
|
目前审计日志中所记录的操作列表以及每个操作中各字段的含义(因为每个操作的施加者,即 user、client_add、时间戳字段在所有操作中的含义相同,下表不再描述)
|
||||||
|
|
||||||
| 操作 | Operation | DB | Resource | Details |
|
| 操作 | Operation | DB | Resource | Details |
|
||||||
| ----------------| ----------| ---------| ---------| --------|
|
| ----------------| ----------| ---------| ---------| --------|
|
||||||
|
@ -110,8 +110,8 @@ CREATE STABLE operations(ts timestamp, details VARCHAR(64000), User VARCHAR(25
|
||||||
| create stable | createStb | db name | stable name | SQL |
|
| create stable | createStb | db name | stable name | SQL |
|
||||||
| alter stable | alterStb | db name | stable name | SQL |
|
| alter stable | alterStb | db name | stable name | SQL |
|
||||||
| drop stable | dropStb | db name | stable name | SQL |
|
| drop stable | dropStb | db name | stable name | SQL |
|
||||||
| create user | createUser | NULL | 被创建的用户名 | 用户属性参数, (password除外) |
|
| create user | createUser | NULL | 被创建的用户名 | 用户属性参数, (password 除外) |
|
||||||
| alter user | alterUser | NULL | 被修改的用户名 | 修改密码操作记录的是被修改的参数和新值 (password除外) ;其他操作记录SQL |
|
| alter user | alterUser | NULL | 被修改的用户名 | 修改密码记录被修改的参数和新值 (password 除外),其他操作记录 SQL |
|
||||||
| drop user | dropUser | NULL | 被删除的用户名 | SQL |
|
| drop user | dropUser | NULL | 被删除的用户名 | SQL |
|
||||||
| create topic | createTopic | topic 所在 DB | 创建的 topic 名字 | SQL |
|
| create topic | createTopic | topic 所在 DB | 创建的 topic 名字 | SQL |
|
||||||
| drop topic | cropTopic | topic 所在 DB | 删除的 topic 名字 | SQL |
|
| drop topic | cropTopic | topic 所在 DB | 删除的 topic 名字 | SQL |
|
||||||
|
@ -123,7 +123,7 @@ CREATE STABLE operations(ts timestamp, details VARCHAR(64000), User VARCHAR(25
|
||||||
| create qnode | createQnode | NULL | dnodeId | SQL |
|
| create qnode | createQnode | NULL | dnodeId | SQL |
|
||||||
| drop qnode | dropQnode | NULL | dnodeId | SQL |
|
| drop qnode | dropQnode | NULL | dnodeId | SQL |
|
||||||
| login | login | NULL | NULL | appName |
|
| login | login | NULL | NULL | appName |
|
||||||
| create stream | createStream | NULL | 所创建的 strem 名 | SQL |
|
| create stream | createStream | NULL | 所创建的 stream 名 | SQL |
|
||||||
| drop stream | dropStream | NULL | 所删除的 stream 名 | SQL |
|
| drop stream | dropStream | NULL | 所删除的 stream 名 | SQL |
|
||||||
| grant privileges| grantPrivileges | NULL | 所授予的用户 | SQL |
|
| grant privileges| grantPrivileges | NULL | 所授予的用户 | SQL |
|
||||||
| remove privileges | revokePrivileges | NULL | 被收回权限的用户 | SQL |
|
| remove privileges | revokePrivileges | NULL | 被收回权限的用户 | SQL |
|
||||||
|
@ -171,7 +171,7 @@ database_option: {
|
||||||
```
|
```
|
||||||
|
|
||||||
主要参数说明如下。
|
主要参数说明如下。
|
||||||
encrypt_algorithm:指定数据采用的加密算法。默认是 none,即不采用加密。sm4 表示采用 SM4 加密算法
|
- encrypt_algorithm:指定数据采用的加密算法。默认是 none,即不采用加密。sm4 表示采用 SM4 加密算法
|
||||||
|
|
||||||
### 查看加密配置
|
### 查看加密配置
|
||||||
|
|
||||||
|
@ -186,7 +186,7 @@ select name, `encrypt_algorithm` from ins_databases;
|
||||||
|
|
||||||
### 查看节点密钥状态
|
### 查看节点密钥状态
|
||||||
|
|
||||||
通过以下的SQL命令参看节点密钥状态:
|
通过以下的 SQL 命令参看节点密钥状态。
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
show encryptions;
|
show encryptions;
|
||||||
|
@ -200,12 +200,12 @@ select * from information_schema.ins_encryptions;
|
||||||
```
|
```
|
||||||
key_status 有三种取值:
|
key_status 有三种取值:
|
||||||
- 当节点未设置密钥时,状态列显示 unset。
|
- 当节点未设置密钥时,状态列显示 unset。
|
||||||
- 当密钥被检验成功并且加载后,状态列显示 loaded.
|
- 当密钥被检验成功并且加载后,状态列显示 loaded。
|
||||||
- 当节点未启动,key的状态无法被探知时,状态列显示 unknown
|
- 当节点未启动,key 的状态无法被探知时,状态列显示 unknown。
|
||||||
|
|
||||||
### 更新密钥配置
|
### 更新密钥配置
|
||||||
|
|
||||||
当节点的硬件配置发生变更时,需要通过以下命令更新密钥,与离线配置密钥的命令相同:
|
当节点的硬件配置发生变更时,需要通过以下命令更新密钥,与离线配置密钥的命令相同。
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
taosd -y {encryptKey}
|
taosd -y {encryptKey}
|
||||||
|
|
|
@ -67,11 +67,15 @@ alter database <dbname> replica 2|1
|
||||||
|
|
||||||
| 异常场景 | 集群状态 |
|
| 异常场景 | 集群状态 |
|
||||||
| ------- | ------ |
|
| ------- | ------ |
|
||||||
| 没有 Vnode 发生故障: Arbitrator 故障(Mnode 宕机节点超过一个,导致 Mnode 无法选主)| **持续提供服务** |
|
| 没有 Vnode 发生故障:Arbitrator 故障(Mnode 宕机节点超过一个,导致 Mnode 无法选主)| **持续提供服务** |
|
||||||
| 仅一个 Vnode 故障:VGroup 已经达成同步后,某一个 Vnode 才发生故障的 | **持续提供服务** |
|
| 仅一个 Vnode 故障:VGroup 已经达成同步后,某一个 Vnode 才发生故障的 | **持续提供服务** |
|
||||||
|
| 仅一个 Vnode 故障:2 个 Vnode 同时故障,故障前 VGroup 达成同步,但是只有一个 Vnode 从故障中恢复服务,另一个 Vnode 服务故障 | **通过下面的命令,强制指定 leader, 继续提供服务** |
|
||||||
| 仅一个 Vnode 故障:离线 Vnode 启动后,VGroup 未达成同步前,另一个 Vnode 服务故障的 | **无法提供服务** |
|
| 仅一个 Vnode 故障:离线 Vnode 启动后,VGroup 未达成同步前,另一个 Vnode 服务故障的 | **无法提供服务** |
|
||||||
| 两个 Vnode 都发生故障 | **无法提供服务** |
|
| 两个 Vnode 都发生故障 | **无法提供服务** |
|
||||||
|
|
||||||
|
```sql
|
||||||
|
ASSIGN LEADER FORCE;
|
||||||
|
```
|
||||||
|
|
||||||
## 常见问题
|
## 常见问题
|
||||||
|
|
||||||
|
|
|
@ -81,7 +81,12 @@ taosx replica start -f source_endpoint -t sink_endpoint [database...]
|
||||||
taosx replica start -f td1:6030 -t td2:6030
|
taosx replica start -f td1:6030 -t td2:6030
|
||||||
```
|
```
|
||||||
|
|
||||||
该示例命令会自动创建除 information_schema、performance_schema、log、audit 库之外的同步任务。可以使用 `http://td2:6041` 指定该 endpoint 使用 websocket 接口(默认是原生接口)。也可以指定数据库同步:taosx replica start -f td1:6030 -t td2:6030 db1 仅创建指定的数据库同步任务。
|
该示例命令会自动创建除 information_schema、performance_schema、log、audit 库之外的同步任务,并持续监听新增的数据库,当 td1 和 td2 中新增同名数据库时可自动启动新增数据库的数据复制任务。需要说明的是:
|
||||||
|
|
||||||
|
- 可以使用 `http://td2:6041` 指定该 endpoint 使用 websocket 接口(默认是原生接口)。
|
||||||
|
- 可以使用 `--new-database-checking-interval <SECONDS>` 指定新增数据库的检查间隔,默认为 30 分钟。
|
||||||
|
- 可以使用 `--no-new-databases` 禁用监听行为。
|
||||||
|
- 也可以指定数据库同步:taosx replica start -f td1:6030 -t td2:6030 db1 仅创建指定的数据库同步任务。此时相当于配置了 `--no-new-databases`,不会开启新增数据库自动同步。
|
||||||
|
|
||||||
2. 方法二
|
2. 方法二
|
||||||
|
|
||||||
|
@ -121,6 +126,7 @@ taosx replica stop id [db...]
|
||||||
该命令作用如下:
|
该命令作用如下:
|
||||||
1. 停止指定 Replica ID 下所有或指定数据库的双副本同步任务。
|
1. 停止指定 Replica ID 下所有或指定数据库的双副本同步任务。
|
||||||
2. 使用 `taosx replica stop id1 db1` 表示停止 id1 replica 下 db1的同步任务。
|
2. 使用 `taosx replica stop id1 db1` 表示停止 id1 replica 下 db1的同步任务。
|
||||||
|
3. `--no-new-databases` 选项启用时,不停止新增数据库监听任务,仅停止当前同步中的数据库。
|
||||||
|
|
||||||
### 重启双活任务
|
### 重启双活任务
|
||||||
|
|
||||||
|
@ -145,8 +151,8 @@ taosx replica diff id [db....]
|
||||||
| replica | database | source | sink | vgroup_id | current | latest | diff |
|
| replica | database | source | sink | vgroup_id | current | latest | diff |
|
||||||
+---------+----------+----------+----------+-----------+---------+---------+------+
|
+---------+----------+----------+----------+-----------+---------+---------+------+
|
||||||
| a | opc | td1:6030 | td2:6030 | 2 | 17600 | 17600 | 0 |
|
| a | opc | td1:6030 | td2:6030 | 2 | 17600 | 17600 | 0 |
|
||||||
| ad | opc | td2:6030 | td2:6030 | 3 | 17600 | 17600 | 0 |
|
| a | opc | td2:6030 | td2:6030 | 3 | 17600 | 17600 | 0 |
|
||||||
```
|
```
|
||||||
|
|
||||||
### 删除双活任务
|
### 删除双活任务
|
||||||
|
|
||||||
|
@ -156,6 +162,16 @@ taosx replica remove id [--force]
|
||||||
|
|
||||||
删除当前所有双活同步任务。正常情况下要想删除同步任务,需要先 stop 该任务;但当 --force 启用时,会强制停止并清除任务。
|
删除当前所有双活同步任务。正常情况下要想删除同步任务,需要先 stop 该任务;但当 --force 启用时,会强制停止并清除任务。
|
||||||
|
|
||||||
|
`--no-new-databases` 选项启用时,不会删除新增数据库同步任务,仅删除当前数据库的同步任务。当 taosx 重启后,如果删除的数据库任务对应的数据库仍然存在,则会继续创建同步任务;不重启 taosx 或者不更新双活监听任务时,也不会再新建这些数据库的同步任务。
|
||||||
|
|
||||||
|
### 更新双活新增数据库检查间隔
|
||||||
|
|
||||||
|
```shell
|
||||||
|
taosx replica update id --new-database-checking-interval <SECONDS>
|
||||||
|
```
|
||||||
|
|
||||||
|
更新双活新增数据库的检查间隔,单位为秒。
|
||||||
|
|
||||||
### 推荐使用步骤
|
### 推荐使用步骤
|
||||||
|
|
||||||
1. 假定在机器 A 上运行,需要首先使用 taosx replica start 来配置 taosX,其输入参数是待同步的源端和目标端服务器地址 ,在完成配置后会自动启动同步服务和任务。此处假定 taosx 服务使用标准端口,同步任务使用原生连接。
|
1. 假定在机器 A 上运行,需要首先使用 taosx replica start 来配置 taosX,其输入参数是待同步的源端和目标端服务器地址 ,在完成配置后会自动启动同步服务和任务。此处假定 taosx 服务使用标准端口,同步任务使用原生连接。
|
||||||
|
|
|
@ -6,7 +6,7 @@ description: 使用 Prometheus 访问 TDengine
|
||||||
|
|
||||||
import Prometheus from "../../14-reference//01-components/_prometheus.mdx"
|
import Prometheus from "../../14-reference//01-components/_prometheus.mdx"
|
||||||
|
|
||||||
Prometheus 是一款流行的开源监控告警系统。Prometheus 于2016年加入了 Cloud Native Computing Foundation (云原生云计算基金会,简称 CNCF),成为继 Kubernetes 之后的第二个托管项目,该项目拥有非常活跃的开发人员和用户社区。
|
Prometheus 是一款流行的开源监控告警系统。Prometheus 于 2016 年加入了 Cloud Native Computing Foundation (云原生云计算基金会,简称 CNCF),成为继 Kubernetes 之后的第二个托管项目,该项目拥有非常活跃的开发人员和用户社区。
|
||||||
|
|
||||||
Prometheus 提供了 `remote_write` 和 `remote_read` 接口来利用其它数据库产品作为它的存储引擎。为了让 Prometheus 生态圈的用户能够利用 TDengine 的高效写入和查询,TDengine 也提供了对这两个接口的支持。
|
Prometheus 提供了 `remote_write` 和 `remote_read` 接口来利用其它数据库产品作为它的存储引擎。为了让 Prometheus 生态圈的用户能够利用 TDengine 的高效写入和查询,TDengine 也提供了对这两个接口的支持。
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ Prometheus 提供了 `remote_write` 和 `remote_read` 接口来利用其它数
|
||||||
要将 Prometheus 数据写入 TDengine 需要以下几方面的准备工作。
|
要将 Prometheus 数据写入 TDengine 需要以下几方面的准备工作。
|
||||||
- TDengine 集群已经部署并正常运行
|
- TDengine 集群已经部署并正常运行
|
||||||
- taosAdapter 已经安装并正常运行。具体细节请参考 [taosAdapter 的使用手册](../../../reference/components/taosadapter)
|
- taosAdapter 已经安装并正常运行。具体细节请参考 [taosAdapter 的使用手册](../../../reference/components/taosadapter)
|
||||||
- Prometheus 已经安装。安装 Prometheus 请参考[官方文档](https://prometheus.io/docs/prometheus/latest/installation/)
|
- Prometheus 已经安装。安装 Prometheus 请参考 [官方文档](https://prometheus.io/docs/prometheus/latest/installation/)
|
||||||
|
|
||||||
## 配置步骤
|
## 配置步骤
|
||||||
<Prometheus />
|
<Prometheus />
|
||||||
|
|
|
@ -15,8 +15,8 @@ Telegraf 是一款十分流行的指标采集开源软件。在数据采集和
|
||||||
要将 Telegraf 数据写入 TDengine 需要以下几方面的准备工作。
|
要将 Telegraf 数据写入 TDengine 需要以下几方面的准备工作。
|
||||||
- TDengine 集群已经部署并正常运行
|
- TDengine 集群已经部署并正常运行
|
||||||
- taosAdapter 已经安装并正常运行。具体细节请参考 [taosAdapter 的使用手册](../../../reference/components/taosadapter)
|
- taosAdapter 已经安装并正常运行。具体细节请参考 [taosAdapter 的使用手册](../../../reference/components/taosadapter)
|
||||||
- Telegraf 已经安装。安装 Telegraf 请参考[官方文档](https://docs.influxdata.com/telegraf/v1.22/install/)
|
- Telegraf 已经安装。安装 Telegraf 请参考 [官方文档](https://docs.influxdata.com/telegraf/v1.22/install/)
|
||||||
- Telegraf 默认采集系统运行状态数据。通过使能[输入插件](https://docs.influxdata.com/telegraf/v1.22/plugins/)方式可以输出[其他格式](https://docs.influxdata.com/telegraf/v1.24/data_formats/input/)的数据到 Telegraf 再写入到 TDengine中。
|
- Telegraf 默认采集系统运行状态数据。通过使能 [输入插件](https://docs.influxdata.com/telegraf/v1.22/plugins/)方式可以输出 [其他格式](https://docs.influxdata.com/telegraf/v1.24/data_formats/input/) 的数据到 Telegraf 再写入到 TDengine中。
|
||||||
|
|
||||||
## 配置步骤
|
## 配置步骤
|
||||||
<Telegraf />
|
<Telegraf />
|
||||||
|
|
|
@ -14,7 +14,7 @@ collectd 是一个用来收集系统性能的守护进程。collectd 提供各
|
||||||
|
|
||||||
要将 collectd 数据写入 TDengine,需要几方面的准备工作。
|
要将 collectd 数据写入 TDengine,需要几方面的准备工作。
|
||||||
- TDengine 集群已经部署并正常运行
|
- TDengine 集群已经部署并正常运行
|
||||||
- taosAdapter 已经安装并正常运行,具体细节请参考[ taosAdapter 的使用手册](../../../reference/components/taosadapter)
|
- taosAdapter 已经安装并正常运行,具体细节请参考 [taosAdapter 的使用手册](../../../reference/components/taosadapter)
|
||||||
- collectd 已经安装。安装 collectd 请参考[官方文档](https://collectd.org/download.shtml)
|
- collectd 已经安装。安装 collectd 请参考[官方文档](https://collectd.org/download.shtml)
|
||||||
|
|
||||||
## 配置步骤
|
## 配置步骤
|
||||||
|
|
|
@ -15,7 +15,7 @@ StatsD 是汇总和总结应用指标的一个简单的守护进程,近些年
|
||||||
要将 StatsD 数据写入 TDengine 需要以下几方面的准备工作。
|
要将 StatsD 数据写入 TDengine 需要以下几方面的准备工作。
|
||||||
- TDengine 集群已经部署并正常运行
|
- TDengine 集群已经部署并正常运行
|
||||||
- taosAdapter 已经安装并正常运行。具体细节请参考 [taosAdapter 的使用手册](../../../reference/components/taosadapter)
|
- taosAdapter 已经安装并正常运行。具体细节请参考 [taosAdapter 的使用手册](../../../reference/components/taosadapter)
|
||||||
- StatsD 已经安装。安装 StatsD 请参考[官方文档](https://github.com/statsd/statsd)
|
- StatsD 已经安装。安装 StatsD 请参考 [官方文档](https://github.com/statsd/statsd)
|
||||||
|
|
||||||
## 配置步骤
|
## 配置步骤
|
||||||
<StatsD />
|
<StatsD />
|
||||||
|
|
|
@ -14,8 +14,8 @@ icinga2 是一款开源主机、网络监控软件,最初由 Nagios 网络监
|
||||||
|
|
||||||
要将 icinga2 数据写入 TDengine 需要以下几方面的准备工作。
|
要将 icinga2 数据写入 TDengine 需要以下几方面的准备工作。
|
||||||
- TDengine 集群已经部署并正常运行
|
- TDengine 集群已经部署并正常运行
|
||||||
- taosAdapter 已经安装并正常运行。具体细节请参考[ taosAdapter 的使用手册](../../../reference/components/taosadapter)
|
- taosAdapter 已经安装并正常运行。具体细节请参考 [taosAdapter 的使用手册](../../../reference/components/taosadapter)
|
||||||
- icinga2 已经安装。安装 icinga2 请参考[官方文档](https://icinga.com/docs/icinga-2/latest/doc/02-installation/)
|
- icinga2 已经安装。安装 icinga2 请参考 [官方文档](https://icinga.com/docs/icinga-2/latest/doc/02-installation/)
|
||||||
|
|
||||||
## 配置步骤
|
## 配置步骤
|
||||||
<Icinga2 />
|
<Icinga2 />
|
||||||
|
|
|
@ -15,7 +15,7 @@ TCollector 是 openTSDB 的一部分,它用来采集客户端日志发送给
|
||||||
要将 TCollector 数据写入 TDengine 需要以下几方面的准备工作。
|
要将 TCollector 数据写入 TDengine 需要以下几方面的准备工作。
|
||||||
- TDengine 集群已经部署并正常运行
|
- TDengine 集群已经部署并正常运行
|
||||||
- taosAdapter 已经安装并正常运行。具体细节请参考 [taosAdapter 的使用手册](../../../reference/components/taosadapter)
|
- taosAdapter 已经安装并正常运行。具体细节请参考 [taosAdapter 的使用手册](../../../reference/components/taosadapter)
|
||||||
- TCollector 已经安装。安装 TCollector 请参考[官方文档](http://opentsdb.net/docs/build/html/user_guide/utilities/tcollector.html#installation-of-tcollector)
|
- TCollector 已经安装。安装 TCollector 请参考 [官方文档](http://opentsdb.net/docs/build/html/user_guide/utilities/tcollector.html#installation-of-tcollector)
|
||||||
|
|
||||||
## 配置步骤
|
## 配置步骤
|
||||||
<TCollector />
|
<TCollector />
|
||||||
|
|
|
@ -4,7 +4,7 @@ title: EMQX Broker 写入
|
||||||
description: 使用 EMQX Broker 写入 TDengine
|
description: 使用 EMQX Broker 写入 TDengine
|
||||||
---
|
---
|
||||||
|
|
||||||
MQTT 是流行的物联网数据传输协议,[EMQX](https://github.com/emqx/emqx)是一开源的 MQTT Broker 软件,无需任何代码,只需要在 EMQX Dashboard 里使用“规则”做简单配置,即可将 MQTT 的数据直接写入 TDengine。EMQX 支持通过 发送到 Web 服务的方式保存数据到 TDengine,也在企业版上提供原生的 TDengine 驱动实现直接保存。
|
MQTT 是流行的物联网数据传输协议,[EMQX](https://github.com/emqx/emqx) 是一开源的 MQTT Broker 软件,无需任何代码,只需要在 EMQX Dashboard 里使用“规则”做简单配置,即可将 MQTT 的数据直接写入 TDengine。EMQX 支持通过 发送到 Web 服务的方式保存数据到 TDengine,也在企业版上提供原生的 TDengine 驱动实现直接保存。
|
||||||
|
|
||||||
## 前置条件
|
## 前置条件
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ USE test;
|
||||||
CREATE TABLE sensor_data (ts TIMESTAMP, temperature FLOAT, humidity FLOAT, volume FLOAT, pm10 FLOAT, pm25 FLOAT, so2 FLOAT, no2 FLOAT, co FLOAT, sensor_id NCHAR(255), area TINYINT, coll_time TIMESTAMP);
|
CREATE TABLE sensor_data (ts TIMESTAMP, temperature FLOAT, humidity FLOAT, volume FLOAT, pm10 FLOAT, pm25 FLOAT, so2 FLOAT, no2 FLOAT, co FLOAT, sensor_id NCHAR(255), area TINYINT, coll_time TIMESTAMP);
|
||||||
```
|
```
|
||||||
|
|
||||||
注:表结构以博客[数据传输、存储、展现,EMQX + TDengine 搭建 MQTT 物联网数据可视化平台](https://www.taosdata.com/blog/2020/08/04/1722.html)为例。后续操作均以此博客场景为例进行,请你根据实际应用场景进行修改。
|
注:表结构以博客 [数据传输、存储、展现,EMQX + TDengine 搭建 MQTT 物联网数据可视化平台](https://www.taosdata.com/blog/2020/08/04/1722.html) 为例。后续操作均以此博客场景为例进行,请你根据实际应用场景进行修改。
|
||||||
|
|
||||||
## 配置 EMQX 规则
|
## 配置 EMQX 规则
|
||||||
|
|
||||||
|
@ -59,7 +59,7 @@ FROM
|
||||||
"sensor/data"
|
"sensor/data"
|
||||||
```
|
```
|
||||||
|
|
||||||
其中 `payload` 代表整个消息体, `sensor/data` 为本规则选取的消息主题。
|
其中 `payload` 代表整个消息体,`sensor/data` 为本规则选取的消息主题。
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
@ -75,7 +75,7 @@ FROM
|
||||||
|
|
||||||
### 编辑“资源(Resource)”
|
### 编辑“资源(Resource)”
|
||||||
|
|
||||||
选择“WebHook”并填写“请求 URL”为 taosAdapter 提供 REST 服务的地址,如果是本地启动的 taosadapter, 那么默认地址为:
|
选择 “WebHook” 并填写“请求 URL”为 taosAdapter 提供 REST 服务的地址,如果是本地启动的 taosadapter, 那么默认地址为:
|
||||||
|
|
||||||
```
|
```
|
||||||
http://127.0.0.1:6041/rest/sql
|
http://127.0.0.1:6041/rest/sql
|
||||||
|
|
|
@ -4,7 +4,7 @@ title: TDengine Kafka Connector
|
||||||
description: 使用 TDengine Kafka Connector 的详细指南
|
description: 使用 TDengine Kafka Connector 的详细指南
|
||||||
---
|
---
|
||||||
|
|
||||||
TDengine Kafka Connector 包含两个插件: TDengine Source Connector 和 TDengine Sink Connector。用户只需提供简单的配置文件,就可以将 Kafka 中指定 topic 的数据(批量或实时)同步到 TDengine, 或将 TDengine 中指定数据库的数据(批量或实时)同步到 Kafka。
|
TDengine Kafka Connector 包含 TDengine Source Connector 和 TDengine Sink Connector 两个插件。用户只需提供简单的配置文件,就可以将 Kafka 中指定 topic 的数据(批量或实时)同步到 TDengine,或将 TDengine 中指定数据库的数据(批量或实时)同步到 Kafka。
|
||||||
|
|
||||||
## 什么是 Kafka Connect?
|
## 什么是 Kafka Connect?
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ TDengine Source Connector 用于把数据实时地从 TDengine 读出来发送
|
||||||
1. Linux 操作系统
|
1. Linux 操作系统
|
||||||
2. 已安装 Java 8 和 Maven
|
2. 已安装 Java 8 和 Maven
|
||||||
3. 已安装 Git、curl、vi
|
3. 已安装 Git、curl、vi
|
||||||
4. 已安装并启动 TDengine。如果还没有可参考[安装和卸载](../../../get-started/)
|
4. 已安装并启动 TDengine。如果还没有可参考 [安装和卸载](../../../get-started/)
|
||||||
|
|
||||||
## 安装 Kafka
|
## 安装 Kafka
|
||||||
|
|
||||||
|
@ -90,9 +90,9 @@ curl http://localhost:8083/connectors
|
||||||
|
|
||||||
## TDengine Sink Connector 的使用
|
## TDengine Sink Connector 的使用
|
||||||
|
|
||||||
TDengine Sink Connector 的作用是同步指定 topic 的数据到 TDengine。用户无需提前创建数据库和超级表。可手动指定目标数据库的名字(见配置参数 connection.database), 也可按一定规则生成(见配置参数 connection.database.prefix)。
|
TDengine Sink Connector 的作用是同步指定 topic 的数据到 TDengine。用户无需提前创建数据库和超级表。可手动指定目标数据库的名字(见配置参数 connection.database),也可按一定规则生成(见配置参数 connection.database.prefix)。
|
||||||
|
|
||||||
TDengine Sink Connector 内部使用 TDengine [无模式写入接口](../../../develop/schemaless)写数据到 TDengine,目前支持三种格式的数据:InfluxDB 行协议格式,OpenTSDB Telnet 协议格式,和 OpenTSDB JSON 协议格式。
|
TDengine Sink Connector 内部使用 TDengine [无模式写入接口](../../../develop/schemaless) 写数据到 TDengine,目前支持三种格式的数据:InfluxDB 行协议格式,OpenTSDB Telnet 协议格式,和 OpenTSDB JSON 协议格式。
|
||||||
|
|
||||||
下面的示例将主题 meters 的数据,同步到目标数据库 power。数据格式为 InfluxDB Line 协议格式。
|
下面的示例将主题 meters 的数据,同步到目标数据库 power。数据格式为 InfluxDB Line 协议格式。
|
||||||
|
|
||||||
|
@ -205,7 +205,7 @@ taos> select * from meters;
|
||||||
Query OK, 4 row(s) in set (0.004208s)
|
Query OK, 4 row(s) in set (0.004208s)
|
||||||
```
|
```
|
||||||
|
|
||||||
若看到了以上数据,则说明同步成功。若没有,请检查 Kafka Connect 的日志。配置参数的详细说明见[配置参考](#配置参考)。
|
若看到了以上数据,则说明同步成功。若没有,请检查 Kafka Connect 的日志。配置参数的详细说明见 [配置参考](#配置参考)。
|
||||||
|
|
||||||
## TDengine Source Connector 的使用
|
## TDengine Source Connector 的使用
|
||||||
|
|
||||||
|
@ -284,7 +284,7 @@ curl -X POST -d @source-demo.json http://localhost:8083/connectors -H "Content-T
|
||||||
|
|
||||||
### 查看 topic 数据
|
### 查看 topic 数据
|
||||||
|
|
||||||
使用 kafka-console-consumer 命令行工具监控主题 tdengine-test-meters 中的数据。一开始会输出所有历史数据, 往 TDengine 插入两条新的数据之后,kafka-console-consumer 也立即输出了新增的两条数据。 输出数据 InfluxDB line protocol 的格式。
|
使用 kafka-console-consumer 命令行工具监控主题 tdengine-test-meters 中的数据。一开始会输出所有历史数据,往 TDengine 插入两条新的数据之后,kafka-console-consumer 也立即输出了新增的两条数据。输出数据 InfluxDB line protocol 的格式。
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
kafka-console-consumer.sh --bootstrap-server localhost:9092 --from-beginning --topic tdengine-test-meters
|
kafka-console-consumer.sh --bootstrap-server localhost:9092 --from-beginning --topic tdengine-test-meters
|
||||||
|
@ -299,7 +299,7 @@ meters,location="California.SanFrancisco",groupid=2i32 current=12.6f32,voltage=2
|
||||||
......
|
......
|
||||||
```
|
```
|
||||||
|
|
||||||
此时会显示所有历史数据。切换到 TDengine CLI, 插入两条新的数据:
|
此时会显示所有历史数据。切换到 TDengine CLI,插入两条新的数据:
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
USE test;
|
USE test;
|
||||||
|
@ -307,7 +307,7 @@ INSERT INTO d1001 VALUES (now, 13.3, 229, 0.38);
|
||||||
INSERT INTO d1002 VALUES (now, 16.3, 233, 0.22);
|
INSERT INTO d1002 VALUES (now, 16.3, 233, 0.22);
|
||||||
```
|
```
|
||||||
|
|
||||||
再切换回 kafka-console-consumer, 此时命令行窗口已经打印出刚插入的 2 条数据。
|
再切换回 kafka-console-consumer,此时命令行窗口已经打印出刚插入的 2 条数据。
|
||||||
|
|
||||||
### unload 插件
|
### unload 插件
|
||||||
|
|
||||||
|
@ -335,7 +335,7 @@ curl -X DELETE http://localhost:8083/connectors/TDengineSourceConnector
|
||||||
| **参数** | **参数说明** | **设置建议** |
|
| **参数** | **参数说明** | **设置建议** |
|
||||||
| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ |
|
| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ |
|
||||||
| producer.type | 此参数用于设置消息的发送方式,默认值为 `sync` 表示同步发送,`async` 表示异步发送。采用异步发送能够提升消息发送的吞吐量。 | async |
|
| producer.type | 此参数用于设置消息的发送方式,默认值为 `sync` 表示同步发送,`async` 表示异步发送。采用异步发送能够提升消息发送的吞吐量。 | async |
|
||||||
| request.required.acks | 参数用于配置生产者发送消息后需要等待的确认数量。当设置为1时,表示只要领导者副本成功写入消息就会给生产者发送确认,而无需等待集群中的其他副本写入成功。这种设置可以在一定程度上保证消息的可靠性,同时也能保证一定的吞吐量。因为不需要等待所有副本都写入成功,所以可以减少生产者的等待时间,提高发送消息的效率。 | 1 |
|
| request.required.acks | 参数用于配置生产者发送消息后需要等待的确认数量。当设置为 1 时,表示只要领导者副本成功写入消息就会给生产者发送确认,而无需等待集群中的其他副本写入成功。这种设置可以在一定程度上保证消息的可靠性,同时也能保证一定的吞吐量。因为不需要等待所有副本都写入成功,所以可以减少生产者的等待时间,提高发送消息的效率。 | 1 |
|
||||||
| max.request.size | 该参数决定了生产者在一次请求中可以发送的最大数据量。其默认值为 1048576,也就是 1M。如果设置得太小,可能会导致频繁的网络请求,降低吞吐量。如果设置得太大,可能会导致内存占用过高,或者在网络状况不佳时增加请求失败的概率。建议设置为 100M。 | 104857600 |
|
| max.request.size | 该参数决定了生产者在一次请求中可以发送的最大数据量。其默认值为 1048576,也就是 1M。如果设置得太小,可能会导致频繁的网络请求,降低吞吐量。如果设置得太大,可能会导致内存占用过高,或者在网络状况不佳时增加请求失败的概率。建议设置为 100M。 | 104857600 |
|
||||||
| batch.size | 此参数用于设定 batch 的大小,默认值为 16384,即 16KB。在消息发送过程中,发送到 Kafka 缓冲区中的消息会被划分成一个个的 batch。故而减小 batch 大小有助于降低消息延迟,而增大 batch 大小则有利于提升吞吐量,可根据实际的数据量大小进行合理配置。可根据实际情况进行调整,建议设置为 512K。 | 524288 |
|
| batch.size | 此参数用于设定 batch 的大小,默认值为 16384,即 16KB。在消息发送过程中,发送到 Kafka 缓冲区中的消息会被划分成一个个的 batch。故而减小 batch 大小有助于降低消息延迟,而增大 batch 大小则有利于提升吞吐量,可根据实际的数据量大小进行合理配置。可根据实际情况进行调整,建议设置为 512K。 | 524288 |
|
||||||
| buffer.memory | 此参数用于设置生产者缓冲待发送消息的内存总量。较大的缓冲区可以允许生产者积累更多的消息后批量发送,提高吞吐量,但也会增加延迟和内存使用。可根据机器资源来配置,建议配置为 1G。 | 1073741824 |
|
| buffer.memory | 此参数用于设置生产者缓冲待发送消息的内存总量。较大的缓冲区可以允许生产者积累更多的消息后批量发送,提高吞吐量,但也会增加延迟和内存使用。可根据机器资源来配置,建议配置为 1G。 | 1073741824 |
|
||||||
|
@ -346,51 +346,51 @@ curl -X DELETE http://localhost:8083/connectors/TDengineSourceConnector
|
||||||
|
|
||||||
以下配置项对 TDengine Sink Connector 和 TDengine Source Connector 均适用。
|
以下配置项对 TDengine Sink Connector 和 TDengine Source Connector 均适用。
|
||||||
|
|
||||||
1. `name`: connector 名称。
|
1. `name`:connector 名称。
|
||||||
1. `connector.class`: connector 的完整类名, 如: com.taosdata.kafka.connect.sink.TDengineSinkConnector。
|
1. `connector.class`:connector 的完整类名,例如如 com.taosdata.kafka.connect.sink.TDengineSinkConnector。
|
||||||
1. `tasks.max`: 最大任务数, 默认 1。
|
1. `tasks.max`:最大任务数, 默认 1。
|
||||||
1. `topics`: 需要同步的 topic 列表, 多个用逗号分隔, 如 `topic1,topic2`。
|
1. `topics`:需要同步的 topic 列表,多个用逗号分隔, 如 `topic1,topic2`。
|
||||||
1. `connection.url`: TDengine JDBC 连接字符串, 如 `jdbc:TAOS://127.0.0.1:6030`。
|
1. `connection.url`:TDengine JDBC 连接字符串,如 `jdbc:TAOS://127.0.0.1:6030`。
|
||||||
1. `connection.user`: TDengine 用户名, 默认 root。
|
1. `connection.user`:TDengine 用户名,默认 root。
|
||||||
1. `connection.password` :TDengine 用户密码, 默认 taosdata。
|
1. `connection.password`:TDengine 用户密码,默认 taosdata。
|
||||||
1. `connection.attempts` :最大尝试连接次数。默认 3。
|
1. `connection.attempts`:最大尝试连接次数。默认 3。
|
||||||
1. `connection.backoff.ms` : 创建连接失败重试时间隔时间,单位为 ms。 默认 5000。
|
1. `connection.backoff.ms`:创建连接失败重试时间隔时间,单位为 ms。默认 5000。
|
||||||
1. `data.precision`: 使用 InfluxDB 行协议格式时,时间戳的精度。可选值为:
|
1. `data.precision`:使用 InfluxDB 行协议格式时,时间戳的精度。可选值为:
|
||||||
1. ms : 表示毫秒
|
1. ms:表示毫秒
|
||||||
1. us : 表示微秒
|
1. us:表示微秒
|
||||||
1. ns : 表示纳秒
|
1. ns:表示纳秒
|
||||||
|
|
||||||
### TDengine Sink Connector 特有的配置
|
### TDengine Sink Connector 特有的配置
|
||||||
|
|
||||||
1. `connection.database`: 目标数据库名。如果指定的数据库不存在会则自动创建。自动建库使用的时间精度为纳秒。默认值为 null。为 null 时目标数据库命名规则参考 `connection.database.prefix` 参数的说明
|
1. `connection.database`:目标数据库名。如果指定的数据库不存在会则自动创建。自动建库使用的时间精度为纳秒。默认值为 null。为 null 时目标数据库命名规则参考 `connection.database.prefix` 参数的说明
|
||||||
2. `connection.database.prefix`: 当 connection.database 为 null 时, 目标数据库的前缀。可以包含占位符 '$\{topic}'。 比如 kafka_$\{topic}, 对于主题 'orders' 将写入数据库 'kafka_orders'。 默认 null。当为 null 时,目标数据库的名字和主题的名字是一致的。
|
2. `connection.database.prefix`:当 connection.database 为 null 时, 目标数据库的前缀。可以包含占位符 '$\{topic}'。比如 kafka_$\{topic}, 对于主题 'orders' 将写入数据库 'kafka_orders'。默认 null。当为 null 时,目标数据库的名字和主题的名字是一致的。
|
||||||
3. `batch.size`: 分批写入每批记录数。当 Sink Connector 一次接收到的数据大于这个值时将分批写入。
|
3. `batch.size`:分批写入每批记录数。当 Sink Connector 一次接收到的数据大于这个值时将分批写入。
|
||||||
4. `max.retries`: 发生错误时的最大重试次数。默认为 1。
|
4. `max.retries`:发生错误时的最大重试次数。默认为 1。
|
||||||
5. `retry.backoff.ms`: 发送错误时重试的时间间隔。单位毫秒,默认为 3000。
|
5. `retry.backoff.ms`:发送错误时重试的时间间隔。单位毫秒,默认为 3000。
|
||||||
6. `db.schemaless`: 数据格式,可选值为:
|
6. `db.schemaless`:数据格式,可选值为:
|
||||||
1. line :代表 InfluxDB 行协议格式
|
1. line:代表 InfluxDB 行协议格式
|
||||||
2. json : 代表 OpenTSDB JSON 格式
|
2. json:代表 OpenTSDB JSON 格式
|
||||||
3. telnet :代表 OpenTSDB Telnet 行协议格式
|
3. telnet:代表 OpenTSDB Telnet 行协议格式
|
||||||
|
|
||||||
### TDengine Source Connector 特有的配置
|
### TDengine Source Connector 特有的配置
|
||||||
|
|
||||||
1. `connection.database`: 源数据库名称,无缺省值。
|
1. `connection.database`:源数据库名称,无缺省值。
|
||||||
1. `topic.prefix`: 数据导入 kafka 时使用的 topic 名称的前缀。默认为空字符串 ""。
|
1. `topic.prefix`:数据导入 kafka 时使用的 topic 名称的前缀。默认为空字符串 ""。
|
||||||
1. `timestamp.initial`: 数据同步起始时间。格式为'yyyy-MM-dd HH:mm:ss',若未指定则从指定 DB 中最早的一条记录开始。
|
1. `timestamp.initial`:数据同步起始时间。格式为'yyyy-MM-dd HH:mm:ss',若未指定则从指定 DB 中最早的一条记录开始。
|
||||||
1. `poll.interval.ms`: 检查是否有新建或删除的表的时间间隔,单位为 ms。默认为 1000。
|
1. `poll.interval.ms`:检查是否有新建或删除的表的时间间隔,单位为 ms。默认为 1000。
|
||||||
1. `fetch.max.rows` : 检索数据库时最大检索条数。 默认为 100。
|
1. `fetch.max.rows`:检索数据库时最大检索条数。默认为 100。
|
||||||
1. `query.interval.ms`: 从 TDengine 一次读取数据的时间跨度,需要根据表中的数据特征合理配置,避免一次查询的数据量过大或过小;在具体的环境中建议通过测试设置一个较优值,默认值为 0,即获取到当前最新时间的所有数据。
|
1. `query.interval.ms`:从 TDengine 一次读取数据的时间跨度,需要根据表中的数据特征合理配置,避免一次查询的数据量过大或过小;在具体的环境中建议通过测试设置一个较优值,默认值为 0,即获取到当前最新时间的所有数据。
|
||||||
1. `out.format` : 结果集输出格式。`line` 表示输出格式为 InfluxDB Line 协议格式,`json` 表示输出格式是 json。默认为 line。
|
1. `out.format`:结果集输出格式。`line` 表示输出格式为 InfluxDB Line 协议格式,`json` 表示输出格式是 json。默认为 line。
|
||||||
1. `topic.per.stable`: 如果设置为 true,表示一个超级表对应一个 Kafka topic,topic的命名规则 `<topic.prefix><topic.delimiter><connection.database><topic.delimiter><stable.name>`;如果设置为 false,则指定的 DB 中的所有数据进入一个 Kafka topic,topic 的命名规则为 `<topic.prefix><topic.delimiter><connection.database>`
|
1. `topic.per.stable`:如果设置为 true,表示一个超级表对应一个 Kafka topic,topic的命名规则 `<topic.prefix><topic.delimiter><connection.database><topic.delimiter><stable.name>`;如果设置为 false,则指定的 DB 中的所有数据进入一个 Kafka topic,topic 的命名规则为 `<topic.prefix><topic.delimiter><connection.database>`
|
||||||
1. `topic.ignore.db`: topic 命名规则是否包含 database 名称,true 表示规则为 `<topic.prefix><topic.delimiter><stable.name>`,false 表示规则为 `<topic.prefix><topic.delimiter><connection.database><topic.delimiter><stable.name>`,默认 false。此配置项在 `topic.per.stable` 设置为 false 时不生效。
|
1. `topic.ignore.db`:topic 命名规则是否包含 database 名称,true 表示规则为 `<topic.prefix><topic.delimiter><stable.name>`,false 表示规则为 `<topic.prefix><topic.delimiter><connection.database><topic.delimiter><stable.name>`,默认 false。此配置项在 `topic.per.stable` 设置为 false 时不生效。
|
||||||
1. `topic.delimiter`: topic 名称分割符,默认为 `-`。
|
1. `topic.delimiter`:topic 名称分割符,默认为 `-`。
|
||||||
1. `read.method`: 从 TDengine 读取数据方式,query 或是 subscription。默认为 subscription。
|
1. `read.method`:从 TDengine 读取数据方式,query 或是 subscription。默认为 subscription。
|
||||||
1. `subscription.group.id`: 指定 TDengine 数据订阅的组 id,当 `read.method` 为 subscription 时,此项为必填项。
|
1. `subscription.group.id`:指定 TDengine 数据订阅的组 id,当 `read.method` 为 subscription 时,此项为必填项。
|
||||||
1. `subscription.from`: 指定 TDengine 数据订阅起始位置,latest 或是 earliest。默认为 latest。
|
1. `subscription.from`:指定 TDengine 数据订阅起始位置,latest 或是 earliest。默认为 latest。
|
||||||
|
|
||||||
## 其他说明
|
## 其他说明
|
||||||
|
|
||||||
1. 关于如何在独立安装的 Kafka 环境使用 Kafka Connect 插件, 请参考官方文档:[https://kafka.apache.org/documentation/#connect](https://kafka.apache.org/documentation/#connect)。
|
1. 关于如何在独立安装的 Kafka 环境使用 Kafka Connect 插件,请参考官方文档:[https://kafka.apache.org/documentation/#connect](https://kafka.apache.org/documentation/#connect)。
|
||||||
|
|
||||||
## 问题反馈
|
## 问题反馈
|
||||||
|
|
||||||
|
|
|
@ -222,7 +222,7 @@ Properties 中配置参数如下:
|
||||||
- TDengineCdcParams.VALUE_DESERIALIZER:结果集反序列化方法,如果接收结果集类型是 `Flink` 的 `RowData`,仅需要设置为 `RowData`即可。可以继承 `com.taosdata.jdbc.tmq.ReferenceDeserializer`,并指定结果集 bean,实现反序列化。
|
- TDengineCdcParams.VALUE_DESERIALIZER:结果集反序列化方法,如果接收结果集类型是 `Flink` 的 `RowData`,仅需要设置为 `RowData`即可。可以继承 `com.taosdata.jdbc.tmq.ReferenceDeserializer`,并指定结果集 bean,实现反序列化。
|
||||||
- TDengineCdcParams.TMQ_BATCH_MODE:此参数用于批量将数据推送给下游算子,如果设置为 True,创建 `TDengineCdcSource` 对象时需要指定数据类型为 `ConsumerRecords` 类型的泛型形式。
|
- TDengineCdcParams.TMQ_BATCH_MODE:此参数用于批量将数据推送给下游算子,如果设置为 True,创建 `TDengineCdcSource` 对象时需要指定数据类型为 `ConsumerRecords` 类型的泛型形式。
|
||||||
- TDengineCdcParams.GROUP_ID:消费组 ID,同一消费组共享消费进度。最大长度:192。
|
- TDengineCdcParams.GROUP_ID:消费组 ID,同一消费组共享消费进度。最大长度:192。
|
||||||
- TDengineCdcParams.AUTO_OFFSET_RESET: 消费组订阅的初始位置 ( `earliest` 从头开始订阅, `latest` 仅从最新数据开始订阅, 默认 `latest`)。
|
- TDengineCdcParams.AUTO_OFFSET_RESET:消费组订阅的初始位置( `earliest` 从头开始订阅, `latest` 仅从最新数据开始订阅, 默认 `latest`)。
|
||||||
- TDengineCdcParams.ENABLE_AUTO_COMMIT:是否启用消费位点自动提交,true: 自动提交;false:依赖 `checkpoint` 时间来提交, 默认 false。
|
- TDengineCdcParams.ENABLE_AUTO_COMMIT:是否启用消费位点自动提交,true: 自动提交;false:依赖 `checkpoint` 时间来提交, 默认 false。
|
||||||
> **注意**:自动提交模式reader获取完成数据后自动提交,不管下游算子是否正确的处理了数据,存在数据丢失的风险,主要用于为了追求高效的无状态算子场景或是数据一致性要求不高的场景。
|
> **注意**:自动提交模式reader获取完成数据后自动提交,不管下游算子是否正确的处理了数据,存在数据丢失的风险,主要用于为了追求高效的无状态算子场景或是数据一致性要求不高的场景。
|
||||||
|
|
||||||
|
@ -232,7 +232,7 @@ Properties 中配置参数如下:
|
||||||
- TDengineConfigParams.PROPERTY_KEY_RECONNECT_INTERVAL_MS:自动重连重试间隔,单位毫秒,默认值 2000。仅在 `PROPERTY_KEY_ENABLE_AUTO_RECONNECT` 为 true 时生效。
|
- TDengineConfigParams.PROPERTY_KEY_RECONNECT_INTERVAL_MS:自动重连重试间隔,单位毫秒,默认值 2000。仅在 `PROPERTY_KEY_ENABLE_AUTO_RECONNECT` 为 true 时生效。
|
||||||
- TDengineConfigParams.PROPERTY_KEY_RECONNECT_RETRY_COUNT:自动重连重试次数,默认值 3,仅在 `PROPERTY_KEY_ENABLE_AUTO_RECONNECT` 为 true 时生效。
|
- TDengineConfigParams.PROPERTY_KEY_RECONNECT_RETRY_COUNT:自动重连重试次数,默认值 3,仅在 `PROPERTY_KEY_ENABLE_AUTO_RECONNECT` 为 true 时生效。
|
||||||
- TDengineCdcParams.TMQ_SESSION_TIMEOUT_MS:`consumer` 心跳丢失后超时时间,超时后会触发 `rebalance` 逻辑,成功后该 `consumer` 会被删除(从3.3.3.0版本开始支持), 默认值为 12000,取值范围 [6000, 1800000]。
|
- TDengineCdcParams.TMQ_SESSION_TIMEOUT_MS:`consumer` 心跳丢失后超时时间,超时后会触发 `rebalance` 逻辑,成功后该 `consumer` 会被删除(从3.3.3.0版本开始支持), 默认值为 12000,取值范围 [6000, 1800000]。
|
||||||
- TDengineCdcParams.TMQ_MAX_POLL_INTERVAL_MS:`consumer poll` 拉取数据间隔的最长时间,超过该时间,会认为该 `consumer` 离线,触发 `rebalance` 逻辑,成功后该 `consumer` 会被删除。 默认值为 300000,[1000,INT32_MAX]。
|
- TDengineCdcParams.TMQ_MAX_POLL_INTERVAL_MS:`consumer poll` 拉取数据间隔的最长时间,超过该时间,会认为该 `consumer` 离线,触发 `rebalance` 逻辑,成功后该 `consumer` 会被删除。默认值为 300000,[1000,INT32_MAX]。
|
||||||
|
|
||||||
#### 使用 CDC 连接器
|
#### 使用 CDC 连接器
|
||||||
|
|
||||||
|
@ -279,9 +279,9 @@ Properties 中配置参数如下:
|
||||||
- TDengineConfigParams.TD_SUPERTABLE_NAME:写入的超级表名称。接收的数据必须有 tbname 字段,确定写入那张子表。
|
- TDengineConfigParams.TD_SUPERTABLE_NAME:写入的超级表名称。接收的数据必须有 tbname 字段,确定写入那张子表。
|
||||||
- TDengineConfigParams.TD_TABLE_NAME:写入子表或普通表的表名,此参数和TD_SUPERTABLE_NAME 仅需要设置一个即可。
|
- TDengineConfigParams.TD_TABLE_NAME:写入子表或普通表的表名,此参数和TD_SUPERTABLE_NAME 仅需要设置一个即可。
|
||||||
- TDengineConfigParams.VALUE_DESERIALIZER:接收结果集反序列化方法, 如果接收结果集类型是 `Flink` 的 `RowData`,仅需要设置为 `RowData`即可。也可继承 `TDengineSinkRecordSerializer` 并实现 `serialize` 方法,根据 接收的数据类型自定义反序列化方式。
|
- TDengineConfigParams.VALUE_DESERIALIZER:接收结果集反序列化方法, 如果接收结果集类型是 `Flink` 的 `RowData`,仅需要设置为 `RowData`即可。也可继承 `TDengineSinkRecordSerializer` 并实现 `serialize` 方法,根据 接收的数据类型自定义反序列化方式。
|
||||||
- TDengineConfigParams.TD_BATCH_SIZE:设置一次写入 `TDengine` 数据库的批大小 | 当到达批的数量后进行写入,或是一个checkpoint的时间也会触发写入数据库。
|
- TDengineConfigParams.TD_BATCH_SIZE:设置一次写入 `TDengine` 数据库的批大小 | 当到达批的数量后进行写入,或是一个checkpoint的时间也会触发写入数据库。
|
||||||
- TDengineConfigParams.TD_BATCH_MODE:接收批量数据当设置为 True 时,如果数据来源是 `TDengine Source`,则使用 `SourceRecords` 泛型类型来创建 `TDengineSink` 对象;若来源是 `TDengine CDC`,则使用 `ConsumerRecords` 泛型来创建 `TDengineSink` 对象。
|
- TDengineConfigParams.TD_BATCH_MODE:接收批量数据当设置为 True 时,如果数据来源是 `TDengine Source`,则使用 `SourceRecords` 泛型类型来创建 `TDengineSink` 对象;若来源是 `TDengine CDC`,则使用 `ConsumerRecords` 泛型来创建 `TDengineSink` 对象。
|
||||||
- TDengineConfigParams.TD_SOURCE_TYPE:设置数据来源。 当数据来源是 `TDengine Source` 是设置为 'tdengine_source', 当来源是 `TDengine CDC` 设置为 'tdengine_cdc'。当配置 `TD_BATCH_MODE` 为 True 生效。
|
- TDengineConfigParams.TD_SOURCE_TYPE:设置数据来源。当数据来源是 `TDengine Source` 是设置为 'tdengine_source', 当来源是 `TDengine CDC` 设置为 'tdengine_cdc'。当配置 `TD_BATCH_MODE` 为 True 生效。
|
||||||
- TDengineConfigParams.PROPERTY_KEY_MESSAGE_WAIT_TIMEOUT: 消息超时时间, 单位 ms, 默认值为 60000。
|
- TDengineConfigParams.PROPERTY_KEY_MESSAGE_WAIT_TIMEOUT: 消息超时时间, 单位 ms, 默认值为 60000。
|
||||||
- TDengineConfigParams.PROPERTY_KEY_ENABLE_COMPRESSION: 传输过程是否启用压缩。true: 启用,false: 不启用。默认为 false。
|
- TDengineConfigParams.PROPERTY_KEY_ENABLE_COMPRESSION: 传输过程是否启用压缩。true: 启用,false: 不启用。默认为 false。
|
||||||
- TDengineConfigParams.PROPERTY_KEY_ENABLE_AUTO_RECONNECT: 是否启用自动重连。true: 启用,false: 不启用。默认为 false。
|
- TDengineConfigParams.PROPERTY_KEY_ENABLE_AUTO_RECONNECT: 是否启用自动重连。true: 启用,false: 不启用。默认为 false。
|
||||||
|
@ -355,7 +355,7 @@ Properties 中配置参数如下:
|
||||||
| bootstrap.servers| string | 服务器地址。|
|
| bootstrap.servers| string | 服务器地址。|
|
||||||
| topic | string | 订阅主题。||
|
| topic | string | 订阅主题。||
|
||||||
| td.jdbc.mode | strng | 连接器类型, cdc, sink。|
|
| td.jdbc.mode | strng | 连接器类型, cdc, sink。|
|
||||||
| group.id| string| 消费组 ID,同一消费组共享消费进度。 |
|
| group.id| string| 消费组 ID,同一消费组共享消费进度。|
|
||||||
| auto.offset.reset| string| 消费组订阅的初始位置。<br/>`earliest`: 从头开始订阅 <br/> `latest`: 仅从最新数据开始订阅。<br/> 默认 `latest`。|
|
| auto.offset.reset| string| 消费组订阅的初始位置。<br/>`earliest`: 从头开始订阅 <br/> `latest`: 仅从最新数据开始订阅。<br/> 默认 `latest`。|
|
||||||
| poll.interval_ms| integer| 拉取数据间隔, 默认 500ms。|
|
| poll.interval_ms| integer| 拉取数据间隔, 默认 500ms。|
|
||||||
| sink.db.name|string| 目标数据库名称。|
|
| sink.db.name|string| 目标数据库名称。|
|
||||||
|
|
|
@ -32,7 +32,7 @@ import TabItem from "@theme/TabItem";
|
||||||
使用 Grafana 最新版本(8.5+),您可以在 Grafana 中[浏览和管理插件](https://grafana.com/docs/grafana/next/administration/plugin-management/#plugin-catalog)(对于 7.x 版本,请采用 **安装脚本** 或 **手动安装** 方式)。在 Grafana 管理界面中的 **Configurations > Plugins** 页面直接搜索 `TDengine` 并按照提示安装。
|
使用 Grafana 最新版本(8.5+),您可以在 Grafana 中[浏览和管理插件](https://grafana.com/docs/grafana/next/administration/plugin-management/#plugin-catalog)(对于 7.x 版本,请采用 **安装脚本** 或 **手动安装** 方式)。在 Grafana 管理界面中的 **Configurations > Plugins** 页面直接搜索 `TDengine` 并按照提示安装。
|
||||||
|
|
||||||
安装完毕后,按照指示 **Create a TDengine data source** 添加数据源,输入 TDengine 相关配置:
|
安装完毕后,按照指示 **Create a TDengine data source** 添加数据源,输入 TDengine 相关配置:
|
||||||
- Host: TDengine 集群中提供 REST 服务的 IP 地址与端口号,默认 `http://localhost:6041`
|
- Host:TDengine 集群中提供 REST 服务的 IP 地址与端口号,默认 `http://localhost:6041`
|
||||||
- User:TDengine 用户名。
|
- User:TDengine 用户名。
|
||||||
- Password:TDengine 用户密码。
|
- Password:TDengine 用户密码。
|
||||||
|
|
||||||
|
@ -58,7 +58,7 @@ bash -c "$(curl -fsSL \
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem value="manual" label="手动安装">
|
<TabItem value="manual" label="手动安装">
|
||||||
|
|
||||||
使用 [`grafana-cli` 命令行工具](https://grafana.com/docs/grafana/latest/administration/cli/) 进行插件[安装](https://grafana.com/grafana/plugins/tdengine-datasource/?tab=installation)。
|
使用 [`grafana-cli` 命令行工具](https://grafana.com/docs/grafana/latest/administration/cli/) 进行插件 [安装](https://grafana.com/grafana/plugins/tdengine-datasource/?tab=installation)。
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
grafana-cli plugins install tdengine-datasource
|
grafana-cli plugins install tdengine-datasource
|
||||||
|
@ -92,7 +92,7 @@ GF_INSTALL_PLUGINS=tdengine-datasource
|
||||||
|
|
||||||
点击 `Add data source` 可进入新增数据源页面,在查询框中输入 TDengine, 然后点击 `select` 选择添加后会进入数据源配置页面,按照默认提示修改相应配置:
|
点击 `Add data source` 可进入新增数据源页面,在查询框中输入 TDengine, 然后点击 `select` 选择添加后会进入数据源配置页面,按照默认提示修改相应配置:
|
||||||
|
|
||||||
- Host: TDengine 集群中提供 REST 服务的 IP 地址与端口号,默认 `http://localhost:6041`
|
- Host:TDengine 集群中提供 REST 服务的 IP 地址与端口号,默认 `http://localhost:6041`
|
||||||
- User:TDengine 用户名。
|
- User:TDengine 用户名。
|
||||||
- Password:TDengine 用户密码。
|
- Password:TDengine 用户密码。
|
||||||
|
|
||||||
|
@ -248,7 +248,7 @@ TDengine 在支持标准 SQL 的基础之上,还提供了一系列满足时序
|
||||||
- `partition by` 子句可以按一定的维度对数据进行切分,然后在切分出的数据空间内再进行一系列的计算。绝大多数情况可以替代 `group by`。
|
- `partition by` 子句可以按一定的维度对数据进行切分,然后在切分出的数据空间内再进行一系列的计算。绝大多数情况可以替代 `group by`。
|
||||||
- `interval` 子句用于产生相等时间周期的窗口
|
- `interval` 子句用于产生相等时间周期的窗口
|
||||||
- `fill` 语句指定某一窗口区间数据缺失的情况下的填充模式
|
- `fill` 语句指定某一窗口区间数据缺失的情况下的填充模式
|
||||||
- `时间戳伪列` 如果需要在结果中输出聚合结果所对应的时间窗口信息,需要在 SELECT 子句中使用时间戳相关的伪列: 时间窗口起始时间 (_wstart), 时间窗口结束时间 (_wend) 等
|
- `时间戳伪列` 如果需要在结果中输出聚合结果所对应的时间窗口信息,需要在 SELECT 子句中使用时间戳相关的伪列:时间窗口起始时间 (_wstart), 时间窗口结束时间 (_wend) 等
|
||||||
|
|
||||||
上述特性详细介绍可以参考 [特色查询](../../../reference/taos-sql/distinguished/)。
|
上述特性详细介绍可以参考 [特色查询](../../../reference/taos-sql/distinguished/)。
|
||||||
|
|
||||||
|
@ -266,7 +266,7 @@ TDengine 在支持标准 SQL 的基础之上,还提供了一系列满足时序
|
||||||
假设我们想查询一段时间内的平均电流大小,时间窗口按 `$interval` 切分,若某一时间窗口区间数据缺失,填充 null。
|
假设我们想查询一段时间内的平均电流大小,时间窗口按 `$interval` 切分,若某一时间窗口区间数据缺失,填充 null。
|
||||||
- “INPUT SQL”:输入要查询的语句(该 SQL 语句的结果集应为两列多行),此处输入:`select _wstart as ts, avg(current) as current from power.meters where groupid in ($selected_groups) and ts > $from and ts < $to interval($interval) fill(null)` ,其中,from、to 和 interval 为 Grafana 内置变量,selected_groups 为自定义变量。
|
- “INPUT SQL”:输入要查询的语句(该 SQL 语句的结果集应为两列多行),此处输入:`select _wstart as ts, avg(current) as current from power.meters where groupid in ($selected_groups) and ts > $from and ts < $to interval($interval) fill(null)` ,其中,from、to 和 interval 为 Grafana 内置变量,selected_groups 为自定义变量。
|
||||||
- “ALIAS BY”:可设置当前查询别名。
|
- “ALIAS BY”:可设置当前查询别名。
|
||||||
- “GENERATE SQL”: 点击该按钮会自动替换相应变量,并生成最终执行的语句。
|
- “GENERATE SQL”:点击该按钮会自动替换相应变量,并生成最终执行的语句。
|
||||||
|
|
||||||
在顶部的自定义变量中,若选择 `selected_groups` 的值为 1,则查询 `meters` 超级表中 `groupid` 为 1 的所有设备电流平均值变化如下图:
|
在顶部的自定义变量中,若选择 `selected_groups` 的值为 1,则查询 `meters` 超级表中 `groupid` 为 1 的所有设备电流平均值变化如下图:
|
||||||
|
|
||||||
|
@ -282,8 +282,8 @@ TDengine 在支持标准 SQL 的基础之上,还提供了一系列满足时序
|
||||||
|
|
||||||
假设我们想查询一段时间内的平均电流大小,按 `groupid` 分组展示,我们可以修改之前的 SQL 为 `select _wstart as ts, groupid, avg(current) as current from power.meters where ts > $from and ts < $to partition by groupid interval($interval) fill(null)`
|
假设我们想查询一段时间内的平均电流大小,按 `groupid` 分组展示,我们可以修改之前的 SQL 为 `select _wstart as ts, groupid, avg(current) as current from power.meters where ts > $from and ts < $to partition by groupid interval($interval) fill(null)`
|
||||||
|
|
||||||
- “Group by column(s)”: **半角**逗号分隔的 `group by` 或 `partition by` 列名。如果是 `group by` 或 `partition by` 查询语句,设置 “Group by” 列,可以展示多维数据。此处设置 “Group by” 列名为 `groupid`,可以按 `groupid` 分组展示数据。
|
- “Group by column(s)”:**半角**逗号分隔的 `group by` 或 `partition by` 列名。如果是 `group by` 或 `partition by` 查询语句,设置 “Group by” 列,可以展示多维数据。此处设置 “Group by” 列名为 `groupid`,可以按 `groupid` 分组展示数据。
|
||||||
- “Group By Format”: `Group by` 或 `Partition by` 场景下多维数据 legend 格式化格式。例如上述 INPUT SQL,将 “Group By Format” 设置为 `groupid-{{groupid}}`,展示的 legend 名字为格式化的分组名。
|
- “Group By Format”:`Group by` 或 `Partition by` 场景下多维数据 legend 格式化格式。例如上述 INPUT SQL,将 “Group By Format” 设置为 `groupid-{{groupid}}`,展示的 legend 名字为格式化的分组名。
|
||||||
|
|
||||||
完成设置后,按照 `groupid` 分组展示如下图:
|
完成设置后,按照 `groupid` 分组展示如下图:
|
||||||
|
|
||||||
|
@ -306,10 +306,10 @@ TDengine 在支持标准 SQL 的基础之上,还提供了一系列满足时序
|
||||||
|
|
||||||
使用 TDengine 作为数据源的其他面板,可以[在此搜索](https://grafana.com/grafana/dashboards/?dataSource=tdengine-datasource)。以下是一份不完全列表:
|
使用 TDengine 作为数据源的其他面板,可以[在此搜索](https://grafana.com/grafana/dashboards/?dataSource=tdengine-datasource)。以下是一份不完全列表:
|
||||||
|
|
||||||
- [15146](https://grafana.com/grafana/dashboards/15146): 监控多个 TDengine 集群
|
- [15146](https://grafana.com/grafana/dashboards/15146):监控多个 TDengine 集群
|
||||||
- [15155](https://grafana.com/grafana/dashboards/15155): TDengine 告警示例
|
- [15155](https://grafana.com/grafana/dashboards/15155):TDengine 告警示例
|
||||||
- [15167](https://grafana.com/grafana/dashboards/15167): TDinsight
|
- [15167](https://grafana.com/grafana/dashboards/15167):TDinsight
|
||||||
- [16388](https://grafana.com/grafana/dashboards/16388): Telegraf 采集节点信息的数据展示
|
- [16388](https://grafana.com/grafana/dashboards/16388):Telegraf 采集节点信息的数据展示
|
||||||
|
|
||||||
## 告警配置
|
## 告警配置
|
||||||
|
|
||||||
|
@ -357,7 +357,7 @@ from_address = sender@foxmail.com
|
||||||
然后重启 Grafana 服务(以 Linux 系统为例,执行 `systemctl restart grafana-server.service`)即可添加完成
|
然后重启 Grafana 服务(以 Linux 系统为例,执行 `systemctl restart grafana-server.service`)即可添加完成
|
||||||
|
|
||||||
在 Grafana 页面找到 “Home” -> “Alerting” -> “Contact points”,创建新联络点
|
在 Grafana 页面找到 “Home” -> “Alerting” -> “Contact points”,创建新联络点
|
||||||
“Name”: Email Contact Point
|
“Name”:Email Contact Point
|
||||||
“Integration”:选择联络类型,这里选择 Email,填写邮件接收地址,完成后保存联络点
|
“Integration”:选择联络类型,这里选择 Email,填写邮件接收地址,完成后保存联络点
|
||||||
|
|
||||||

|

|
||||||
|
@ -389,9 +389,9 @@ from_address = sender@foxmail.com
|
||||||

|

|
||||||
|
|
||||||
然后配置下列参数:
|
然后配置下列参数:
|
||||||
- “Group wait”: 发送首次告警之前的等待时间。
|
- “Group wait”:发送首次告警之前的等待时间。
|
||||||
- “Group interval”: 发送第一个告警后,为该组发送下一批新告警的等待时间。
|
- “Group interval”:发送第一个告警后,为该组发送下一批新告警的等待时间。
|
||||||
- “Repeat interval”: 成功发送告警后再次重复发送告警的等待时间。
|
- “Repeat interval”:成功发送告警后再次重复发送告警的等待时间。
|
||||||
|
|
||||||
### 配置告警规则
|
### 配置告警规则
|
||||||
|
|
||||||
|
|
|
@ -3,26 +3,29 @@ sidebar_label: Looker
|
||||||
title: 与 Looker Studio 的集成
|
title: 与 Looker Studio 的集成
|
||||||
toc_max_heading_level: 4
|
toc_max_heading_level: 4
|
||||||
---
|
---
|
||||||
Looker Studio,作为Google旗下的一个功能强大的报表和商业智能工具,前身名为Google Data Studio。在2022年的Google Cloud Next大会上,Google将其更名为Looker Studio。这个工具凭借其丰富的数据可视化选项和多样化的数据连接能力,为用户提供了便捷的数据报表生成体验。用户可以根据预设的模板轻松创建数据报表,满足各种数据分析需求。
|
Looker Studio,作为 Google 旗下的一个功能强大的报表和商业智能工具,前身名为 Google Data Studio。在 2022 年的 Google Cloud Next 大会上,Google 将其更名为 Looker Studio。这个工具凭借其丰富的数据可视化选项和多样化的数据连接能力,为用户提供了便捷的数据报表生成体验。用户可以根据预设的模板轻松创建数据报表,满足各种数据分析需求。
|
||||||
|
|
||||||
由于其简单易用的操作界面和庞大的生态系统支持,Looker Studio在数据分析领域受到众多数据科学家和专业人士的青睐。无论是初学者还是资深分析师,都可以利用Looker Studio快速构建美观且实用的数据报表,从而更好地洞察业务趋势、优化决策过程并提升整体运营效率。
|
由于其简单易用的操作界面和庞大的生态系统支持,Looker Studio 在数据分析领域受到众多数据科学家和专业人士的青睐。无论是初学者还是资深分析师,都可以利用 Looker Studio 快速构建美观且实用的数据报表,从而更好地洞察业务趋势、优化决策过程并提升整体运营效率。
|
||||||
|
|
||||||
## 获取
|
## 获取
|
||||||
|
|
||||||
目前,TDengine连接器作为Looker Studio的合作伙伴连接器(partner connector),已在Looker Studio官网上线。用户访问Looker Studio的Data Source列表时,只须输入 “TDengine”进行搜索,便可轻松找到并立即使用TDengine连接器。
|
目前,TDengine 连接器作为 Looker Studio 的合作伙伴连接器(partner connector),已在 Looker Studio 官网上线。用户访问 Looker Studio 的 Data Source 列表时,只须输入 “TDengine” 进行搜索,便可轻松找到并立即使用 TDengine 连接器。
|
||||||
|
|
||||||
TDengine连接器兼容TDengine Cloud和TDengine Server两种类型的数据源。TDengine Cloud是涛思数据推出的全托管物联网和工业互联网大数据云服务平台,为用户提供一站式数据存储、处理和分析解决方案;而TDengine Server则是用户自行部署的本地版本,支持通过公网访问。以下内容将以TDengine Cloud为例进行介绍。
|
TDengine 连接器兼容 TDengine Cloud 和 TDengine Server 两种类型的数据源。TDengine Cloud 是涛思数据推出的全托管物联网和工业互联网大数据云服务平台,为用户提供一站式数据存储、处理和分析解决方案;而 TDengine Server 则是用户自行部署的本地版本,支持通过公网访问。以下内容将以 TDengine Cloud 为例进行介绍。
|
||||||
|
|
||||||
## 使用
|
## 使用
|
||||||
|
|
||||||
在Looker Studio中使用TDengine连接器的步骤如下。
|
在Looker Studio中使用 TDengine 连接器的步骤如下。
|
||||||
|
|
||||||
第1步,进入TDengine连接器的详情页面后,在Data Source下拉列表中选择TDengine Cloud,然后点击Next按钮,即可进入数据源配置页面。在该页面中填写以下信息,然后点击Connect按钮。
|
第 1 步,进入TDengine连接器的详情页面后,在 Data Source 下拉列表中选择 TDengine Cloud,然后点击 Next 按钮,即可进入数据源配置页面。在该页面中填写以下信息,然后点击 Connect 按钮。
|
||||||
- URL和TDengine Cloud Token,可以从TDengine Cloud的实例列表中获取。
|
- URL 和 TDengine Cloud Token,可以从 TDengine Cloud 的实例列表中获取。
|
||||||
- 数据库名称和超级表名称。
|
- 数据库名称和超级表名称。
|
||||||
- 查询数据的开始时间和结束时间。
|
- 查询数据的开始时间和结束时间。
|
||||||
第2步,Looker Studio会根据配置自动加载所配置的TDengine数据库下的超级表的字段和标签。
|
|
||||||
第3步,点击页面右上角的Explore按钮,即查看从TDengine数据库中加载的数据。
|
|
||||||
第4步,根据需求,利用Looker Studio提供的图表,进行数据可视化的配置。
|
|
||||||
|
|
||||||
**注意** 在第一次使用时,请根据页面提示,对Looker Studio的TDengine连接器进行访问授权。
|
第 2 步,Looker Studio 会根据配置自动加载所配置的 TDengine 数据库下的超级表的字段和标签。
|
||||||
|
|
||||||
|
第 3 步,点击页面右上角的 Explore 按钮,即查看从 TDengine 数据库中加载的数据。
|
||||||
|
|
||||||
|
第 4 步,根据需求,利用 Looker Studio 提供的图表,进行数据可视化的配置。
|
||||||
|
|
||||||
|
**注意** 在第一次使用时,请根据页面提示,对 Looker Studio 的 TDengine 连接器进行访问授权。
|
|
@ -12,7 +12,7 @@ Power BI 是由 Microsoft 提供的一种商业分析工具。通过配置使用
|
||||||
- TDengine 3.3.4.0 以上版本集群已部署并正常运行(企业及社区版均可)。
|
- TDengine 3.3.4.0 以上版本集群已部署并正常运行(企业及社区版均可)。
|
||||||
- taosAdapter 能够正常运行,详细参考 [taosAdapter 参考手册](../../../reference/components/taosadapter)。
|
- taosAdapter 能够正常运行,详细参考 [taosAdapter 参考手册](../../../reference/components/taosadapter)。
|
||||||
- 从 TDengine 官网下载最新的 Windows 操作系统 X64 客户端驱动程序并进行安装,详细参考 [安装 ODBC 驱动](../../../reference/connector/odbc/#安装)。
|
- 从 TDengine 官网下载最新的 Windows 操作系统 X64 客户端驱动程序并进行安装,详细参考 [安装 ODBC 驱动](../../../reference/connector/odbc/#安装)。
|
||||||
- 安装完成 Power BI Desktop 软件并运行(如未安装,请从其官方地址下载最新的Windows操作系统 32/64 位版本)。
|
- 安装完成 Power BI Desktop 软件并运行(如未安装,请从其官方地址下载最新的 Windows 操作系统 32/64 位版本)。
|
||||||
|
|
||||||
## 配置数据源
|
## 配置数据源
|
||||||
|
|
||||||
|
@ -29,8 +29,8 @@ Power BI 是由 Microsoft 提供的一种商业分析工具。通过配置使用
|
||||||
### 使用说明
|
### 使用说明
|
||||||
|
|
||||||
为了充分发挥 Power BI 在分析 TDengine中 数据方面的优势,用户需要先理解维度、度量、窗口切分查询、数据切分查询、时序和相关性等核心概念,之后通过自定义的 SQL 导入数据。
|
为了充分发挥 Power BI 在分析 TDengine中 数据方面的优势,用户需要先理解维度、度量、窗口切分查询、数据切分查询、时序和相关性等核心概念,之后通过自定义的 SQL 导入数据。
|
||||||
- 维度:通常是分类(文本)数据,描述设备、测点、型号等类别信息。在 TDengine 的超级表中,使用标签列存储数据的维度信息,可以通过形如 “select distinct tbname, tag1, tag2 from supertable” 的SQL语法快速获得维度信息。
|
- 维度:通常是分类(文本)数据,描述设备、测点、型号等类别信息。在 TDengine 的超级表中,使用标签列存储数据的维度信息,可以通过形如 `select distinct tbname, tag1, tag2 from supertable` 的 SQL 语法快速获得维度信息。
|
||||||
- 度量:可以用于进行计算的定量(数值)字段,常见计算有求和、取平均值和最小值等。如果测点的采集周期为1s,那么一年就有 3000 多万条记录,把这些数据全部导入 Power BI 会严重影响其执行效率。在 TDengine 中,用户可以使用数据切分查询、窗口切分查询等语法,结合与窗口相关的伪列,把降采样后的数据导入Power BI 中,具体语法请参阅 TDengine 官方文档的特色查询功能部分。
|
- 度量:可以用于进行计算的定量(数值)字段,常见计算有求和、取平均值和最小值等。如果测点的采集周期为 1s,那么一年就有 3000 多万条记录,把这些数据全部导入 Power BI 会严重影响其执行效率。在 TDengine 中,用户可以使用数据切分查询、窗口切分查询等语法,结合与窗口相关的伪列,把降采样后的数据导入 Power BI 中,具体语法请参阅 TDengine 官方文档的特色查询功能部分。
|
||||||
- 窗口切分查询:比如温度传感器每秒采集一次数据,但须查询每隔 10min 的温度平均值,在这种场景下可以使用窗口子句来获得需要的降采样查询结果,对应的 SQL 形如 `select tbname, _wstart date,avg(temperature) temp from table interval(10m)`,其中,`_wstart` 是伪列,表示时间窗口起始时间,10m 表示时间窗口的持续时间,`avg(temperature)` 表示时间窗口内的聚合值。
|
- 窗口切分查询:比如温度传感器每秒采集一次数据,但须查询每隔 10min 的温度平均值,在这种场景下可以使用窗口子句来获得需要的降采样查询结果,对应的 SQL 形如 `select tbname, _wstart date,avg(temperature) temp from table interval(10m)`,其中,`_wstart` 是伪列,表示时间窗口起始时间,10m 表示时间窗口的持续时间,`avg(temperature)` 表示时间窗口内的聚合值。
|
||||||
- 数据切分查询:如果需要同时获取很多温度传感器的聚合数值,可对数据进行切分,然后在切分出的数据空间内进行一系列的计算,对应的 SQL 形如 `partition by part_list`。数据切分子句最常见的用法是在超级表查询中按标签将子表数据进行切分,将每个子表的数据独立出来,形成一条条独立的时间序列,方便针对各种时序场景的统计分析。
|
- 数据切分查询:如果需要同时获取很多温度传感器的聚合数值,可对数据进行切分,然后在切分出的数据空间内进行一系列的计算,对应的 SQL 形如 `partition by part_list`。数据切分子句最常见的用法是在超级表查询中按标签将子表数据进行切分,将每个子表的数据独立出来,形成一条条独立的时间序列,方便针对各种时序场景的统计分析。
|
||||||
- 时序:在绘制曲线或者按照时间聚合数据时,通常需要引入日期表。日期表可以从 Excel 表格中导入,也可以在 TDengine 中执行 SQL 获取,例如 `select _wstart date, count(*) cnt from test.meters where ts between A and B interval(1d) fill(0)`,其中 fill 字句表示数据缺失情况下的填充模式,伪列 _wstart 则为要获取的日期列。
|
- 时序:在绘制曲线或者按照时间聚合数据时,通常需要引入日期表。日期表可以从 Excel 表格中导入,也可以在 TDengine 中执行 SQL 获取,例如 `select _wstart date, count(*) cnt from test.meters where ts between A and B interval(1d) fill(0)`,其中 fill 字句表示数据缺失情况下的填充模式,伪列 _wstart 则为要获取的日期列。
|
||||||
|
@ -46,7 +46,7 @@ TDengine 采用了一种独特的数据模型,以优化时序数据的存储
|
||||||
|
|
||||||
根据如下步骤,便可以体验通过 Power BI 生成时序数据报表的功能。
|
根据如下步骤,便可以体验通过 Power BI 生成时序数据报表的功能。
|
||||||
|
|
||||||
**第 1 步**,使用 TDengine 的 taosBenchMark 快速生成1000块智能电表3天的数据,采集频率为 1s。
|
**第 1 步**,使用 TDengine 的 taosBenchMark 快速生成 1000 块智能电表 3 天的数据,采集频率为 1s。
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
taosBenchmark -t 1000 -n 259200 -S 1000 -y
|
taosBenchmark -t 1000 -n 259200 -S 1000 -y
|
||||||
|
@ -76,4 +76,4 @@ select _wstart date, count(*) from test.meters interval(1d) having count(*)>0
|
||||||
|
|
||||||
**第 7 步**,制作报告。在柱状图、饼图等控件中使用这些数据。
|
**第 7 步**,制作报告。在柱状图、饼图等控件中使用这些数据。
|
||||||
|
|
||||||
由于TDengine处理时序数据的超强性能,使得用户在数据导入及每日定期刷新数据时,都可以得到非常好的体验。更多有关 Power BI 视觉效果的构建方法,请参照 Power BI 的官方文档。
|
由于 TDengine 处理时序数据的超强性能,使得用户在数据导入及每日定期刷新数据时,都可以得到非常好的体验。更多有关 Power BI 视觉效果的构建方法,请参照 Power BI 的官方文档。
|
||||||
|
|
|
@ -16,7 +16,7 @@ toc_max_heading_level: 4
|
||||||
- TDengine 3.3.2.0 以上版本集群已部署并正常运行(企业及社区版均可)。
|
- TDengine 3.3.2.0 以上版本集群已部署并正常运行(企业及社区版均可)。
|
||||||
- taosAdapter 能够正常运行,详细参考 [taosAdapter 参考手册](../../../reference/components/taosadapter)。
|
- taosAdapter 能够正常运行,详细参考 [taosAdapter 参考手册](../../../reference/components/taosadapter)。
|
||||||
- 确保永洪 BI 已经安装并运行(如果未安装,请到永洪科技官方下载页面下载)。
|
- 确保永洪 BI 已经安装并运行(如果未安装,请到永洪科技官方下载页面下载)。
|
||||||
- 安装JDBC驱动。从 maven.org 下载 TDengine JDBC 连接器文件 `taos-jdbcdriver-3.4.0-dist.jar` 及以上版本。
|
- 安装 JDBC 驱动。从 maven.org 下载 TDengine JDBC 连接器文件 `taos-jdbcdriver-3.4.0-dist.jar` 及以上版本。
|
||||||
|
|
||||||
## 配置数据源
|
## 配置数据源
|
||||||
|
|
||||||
|
|
|
@ -18,8 +18,6 @@ Seeq 是制造业和工业互联网(IIOT)高级分析软件。Seeq 支持在
|
||||||
|
|
||||||
## 配置数据源
|
## 配置数据源
|
||||||
|
|
||||||
### 配置 JDBC 连接器
|
|
||||||
|
|
||||||
**第 1 步**,查看 data 存储位置
|
**第 1 步**,查看 data 存储位置
|
||||||
|
|
||||||
```
|
```
|
||||||
|
@ -38,9 +36,13 @@ sudo seeq restart
|
||||||
|
|
||||||
使用浏览器访问 ip:34216 并按照说明输入 license。
|
使用浏览器访问 ip:34216 并按照说明输入 license。
|
||||||
|
|
||||||
### 加载 TDengine 时序数据
|
## 数据分析
|
||||||
|
|
||||||
本章节演示如何使用 Seeq 软件加载 TDengine 时序数据。
|
### 场景介绍
|
||||||
|
|
||||||
|
示例场景为一个电力系统,用户每天从电站仪表收集用电量数据,并将其存储在 TDengine 集群中。现在用户想要预测电力消耗将会如何发展,并购买更多设备来支持它。用户电力消耗随着每月订单变化而不同,另外考虑到季节变化,电力消耗量会有所不同。这个城市位于北半球,所以在夏天会使用更多的电力。我们模拟数据来反映这些假定。
|
||||||
|
|
||||||
|
### 数据准备
|
||||||
|
|
||||||
**第 1 步**,在 TDengine 中创建表。
|
**第 1 步**,在 TDengine 中创建表。
|
||||||
|
|
||||||
|
@ -240,12 +242,6 @@ taos -s "insert into power.goods select _wstart, _wstart + 10d, avg(goods) from
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## 数据分析
|
|
||||||
|
|
||||||
### 场景介绍
|
|
||||||
|
|
||||||
示例场景为一个电力系统,用户每天从电站仪表收集用电量数据,并将其存储在 TDengine 集群中。现在用户想要预测电力消耗将会如何发展,并购买更多设备来支持它。用户电力消耗随着每月订单变化而不同,另外考虑到季节变化,电力消耗量会有所不同。这个城市位于北半球,所以在夏天会使用更多的电力。我们模拟数据来反映这些假定。
|
|
||||||
|
|
||||||
### 使用 Seeq Workbench
|
### 使用 Seeq Workbench
|
||||||
|
|
||||||
登录 Seeq 服务页面并新建 Seeq Workbench,通过选择数据源搜索结果和根据需要选择不同的工具,可以进行数据展现或预测,详细使用方法参见 [官方知识库](https://support.seeq.com/space/KB/146440193/Seeq+Workbench)。
|
登录 Seeq 服务页面并新建 Seeq Workbench,通过选择数据源搜索结果和根据需要选择不同的工具,可以进行数据展现或预测,详细使用方法参见 [官方知识库](https://support.seeq.com/space/KB/146440193/Seeq+Workbench)。
|
||||||
|
|
|
@ -4,38 +4,39 @@ title: 与 Superset 集成
|
||||||
---
|
---
|
||||||
Apache Superset 是一个现代的企业级商业智能(BI)Web 应用程序,主要用于数据探索和可视化。它由 Apache 软件基金会支持,是一个开源项目,它拥有活跃的社区和丰富的生态系统。Apache Superset 提供了直观的用户界面,使得创建、分享和可视化数据变得简单,同时支持多种数据源和丰富的可视化选项。
|
Apache Superset 是一个现代的企业级商业智能(BI)Web 应用程序,主要用于数据探索和可视化。它由 Apache 软件基金会支持,是一个开源项目,它拥有活跃的社区和丰富的生态系统。Apache Superset 提供了直观的用户界面,使得创建、分享和可视化数据变得简单,同时支持多种数据源和丰富的可视化选项。
|
||||||
|
|
||||||
通过 TDengine 的 Python 连接器, Apache Superset 可支持 TDengine 数据源并提供数据展现、分析等功能
|
通过 TDengine 的 Python 连接器, Apache Superset 可支持 TDengine 数据源并提供数据展现、分析等功能。
|
||||||
|
|
||||||
|
|
||||||
## 前置条件
|
## 前置条件
|
||||||
|
|
||||||
准备以下环境:
|
准备以下环境:
|
||||||
- TDengine 集群已部署并正常运行(企业及社区版均可)
|
- TDengine 3.2.3.0 及以上版本集群已部署并正常运行(企业及社区版均可)。
|
||||||
- taosAdapter 能够正常运行。详细参考 [taosAdapter 使用手册](../../../reference/components/taosadapter)
|
- taosAdapter 能够正常运行,详细参考 [taosAdapter 使用手册](../../../reference/components/taosadapter)。
|
||||||
- Apache Superset v2.1.0 或以上版本已安装。安装 Apache Superset 请参考 [官方文档](https://superset.apache.org/)
|
- Apache Superset v2.1.0 或以上版本已安装,安装 Apache Superset 请参考 [官方文档](https://superset.apache.org/)。
|
||||||
|
- 安装 Python 连接器驱动,详细参考 [TDengine Python Connector](../../../reference/connector/python)。
|
||||||
|
|
||||||
|
|
||||||
## 安装 TDengine Python 连接器
|
|
||||||
|
|
||||||
TDengine Python 连接器从 `v2.1.18` 起带 Superset 连接驱动,会安装至 Superset 相应目录下并向 Superset 提供数据源服务
|
|
||||||
Superset 与 TDengine 之间使用 WebSocket 协议连接,需安装支持此协议的 `taos-ws-py` 组件, 全部安装脚本如下:
|
|
||||||
```bash
|
|
||||||
pip3 install taospy
|
|
||||||
pip3 install taos-ws-py
|
|
||||||
```
|
|
||||||
|
|
||||||
## 配置 TDengine 数据源
|
|
||||||
|
|
||||||
**第 1 步**,进入新建数据库连接页面 "Superset" → "Setting" → "Database Connections" → "+DATABASE"
|
|
||||||
**第 2 步**,选择 TDengine 数据库连接。"SUPPORTED DATABASES" 下拉列表中选择 "TDengine" 项。
|
|
||||||
:::tip
|
:::tip
|
||||||
注意:若下拉列表中无 "TDengine" 项,请检查安装顺序,确保 `TDengine Python 连接器` 在 `Superset` 安装之后再安装。
|
TDengine Python 连接器从 `v2.1.18` 起带 Superset 连接驱动,会安装至 Superset 相应目录下并向 Superset 提供数据源服务。
|
||||||
|
:::
|
||||||
|
|
||||||
|
## 配置数据源
|
||||||
|
|
||||||
|
**第 1 步**,进入新建数据库连接页面【Superset】 -> 【Setting】->【Database Connections ->【+DATABASE】。
|
||||||
|
|
||||||
|
**第 2 步**,选择 TDengine 数据库连接。【SUPPORTED DATABASES】下拉列表中选择 `TDengine` 项。
|
||||||
|
|
||||||
|
:::tip
|
||||||
|
注意:若下拉列表中无 `TDengine` 项,请检查安装顺序,确保 `TDengine Python 连接器` 在 `Superset` 安装之后再安装。
|
||||||
:::
|
:::
|
||||||
**第 3 步**,"DISPLAY NAME" 中填写连接名称,任意填写即可。
|
|
||||||
**第 4 步**,"SQLALCHEMY URL" 项为关键连接信息串,务必填写正确。
|
**第 3 步**,【DISPLAY NAME】中填写连接名称,任意填写即可。
|
||||||
|
|
||||||
|
**第 4 步**,【SQLALCHEMY URL】项为关键连接信息串,务必填写正确。
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
taosws://用户名:密码@主机名:端口号
|
taosws://用户名:密码@主机名:端口号
|
||||||
```
|
```
|
||||||
|
|
||||||
| 参数名称 | <center>参数说明</center> |
|
| 参数名称 | <center>参数说明</center> |
|
||||||
|:------- |:-------------------------------- |
|
|:------- |:-------------------------------- |
|
||||||
| 用户名 | 登录 TDengine 数据库用户名 |
|
| 用户名 | 登录 TDengine 数据库用户名 |
|
||||||
|
@ -43,32 +44,33 @@ taosws://用户名:密码@主机名:端口号
|
||||||
| 主机名 | TDengine 数据库所在主机名称 |
|
| 主机名 | TDengine 数据库所在主机名称 |
|
||||||
| 端口号 | 提供 WebSocket 服务的端口,默认:6041 |
|
| 端口号 | 提供 WebSocket 服务的端口,默认:6041 |
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
本机安装 TDengine 数据库,WebSocket 服务端口 6041,使用默认用户名密码,"SQLALCHEMY URL" 应为:
|
|
||||||
|
本机安装 TDengine 数据库,WebSocket 服务端口 6041,使用默认用户名密码,`SQLALCHEMY URL` 应为:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
taosws://root:taosdata@localhost:6041
|
taosws://root:taosdata@localhost:6041
|
||||||
```
|
```
|
||||||
**第 5 步**,配置好连接串,点击 “TEST CONNECTION” 测试连接是否成功,测试通过后点击 “CONNECT” 按钮,完成连接。
|
**第 5 步**,配置好连接串,点击【TEST CONNECTION】测试连接是否成功,测试通过后点击【CONNECT】按钮,完成连接。
|
||||||
|
|
||||||
|
## 数据分析
|
||||||
|
|
||||||
## 开始使用
|
### 数据准备
|
||||||
|
|
||||||
TDengine 数据源与其它数据源使用上无差别,这里简单介绍下数据查询:
|
TDengine 数据源与其它数据源使用上无差别,这里简单介绍下数据查询:
|
||||||
1. Superset 界面点击右上角 “+” 号按钮,选择 “SQL query”, 进入查询界面
|
|
||||||
2. 左上角 “DATABASE” 下拉列表中选择前面已创建好的 “TDengine” 数据源
|
|
||||||
3. “SCHEMA” 下拉列表,选择要操作的数据库名(系统库不显示)
|
|
||||||
4. “SEE TABLE SCHEMA” 选择要操作的超级表名或普通表名(子表不显示)
|
|
||||||
5. 随后会在下方显示选定表的 SCHEMA 信息
|
|
||||||
6. 在 SQL 编辑器区域可输入符合 TDengine 语法的任意 SQL 语句执行
|
|
||||||
|
|
||||||
## 示例效果
|
1. `Superset` 界面点击右上角【+】号按钮,选择 `SQL query`, 进入查询界面。
|
||||||
|
2. 左上角【DATABASE】下拉列表中选择前面已创建好的 `TDengine` 数据源。
|
||||||
|
3. 【SCHEMA】下拉列表,选择要操作的数据库名(系统库不显示)。
|
||||||
|
4. 【SEE TABLE SCHEMA】选择要操作的超级表名或普通表名(子表不显示)。
|
||||||
|
5. 随后会在下方显示选定表的 `SCHEMA` 信息。
|
||||||
|
6. 在 `SQL` 编辑器区域可输入符合 `TDengine` 语法的任意 `SQL` 语句执行。
|
||||||
|
|
||||||
我们选择 Superset Chart 模板中较流行的两个模板做了效果展示,以智能电表数据为例:
|
### 智能电表样例
|
||||||
|
|
||||||
1. "Aggregate" 类型,展示在第 4 组中指定时间段内每分钟采集电压值(voltage)最大值
|
我们选择【Superset Chart】模板中较流行的两个模板做了效果展示,以智能电表数据为例:
|
||||||
|
|
||||||

|
1. `Aggregate` 类型,展示在第 4 组中指定时间段内每分钟采集电压值(voltage)最大值。
|
||||||
|

|
||||||
2. "RAW RECORDS" 类型,展示在第 4 组中指定时间段内 current, voltage 的采集值
|
2. `RAW RECORDS` 类型,展示在第 4 组中指定时间段内 current, voltage 的采集值。
|
||||||
|

|
||||||

|
|
||||||
|
|
|
@ -8,17 +8,21 @@ Tableau 是一款知名的商业智能工具,它支持多种数据源,可方
|
||||||
## 前置条件
|
## 前置条件
|
||||||
|
|
||||||
准备以下环境:
|
准备以下环境:
|
||||||
- TDengine 3.3.5.4 以上版本集群已部署并正常运行(企业及社区版均可)
|
- TDengine 3.3.5.8 以上版本集群已部署并正常运行(企业及社区版均可)。
|
||||||
- taosAdapter 能够正常运行。详细参考 [taosAdapter 参考手册](../../../reference/components/taosadapter)
|
- taosAdapter 能够正常运行。详细参考 [taosAdapter 参考手册](../../../reference/components/taosadapter)。
|
||||||
- Tableau 桌面版安装并运行(如未安装,请下载并安装 Windows 操作系统 64 位 [Tableau 桌面版](https://www.tableau.com/products/desktop/download) )。安装 Tableau 桌面版请参考 [官方文档](https://www.tableau.com)。
|
- Tableau 桌面版安装并运行(如未安装,请下载并安装 Windows 操作系统 64 位 [Tableau 桌面版](https://www.tableau.com/products/desktop/download) )。安装 Tableau 桌面版请参考 [官方文档](https://www.tableau.com)。
|
||||||
- 从TDengine官网下载最新的Windows操作系统X64客户端驱动程序,并进行安装。详细参考 [安装 ODBC 驱动](../../../reference/connector/odbc/#安装)。
|
- 从 TDengine 官网下载最新的 Windows 操作系统 X64 客户端驱动程序,并进行安装。详细参考 [安装 ODBC 驱动](../../../reference/connector/odbc/#安装)。
|
||||||
|
|
||||||
|
|
||||||
## 配置数据源
|
## 配置数据源
|
||||||
|
|
||||||
**第 1 步**,在Windows操作系统的开始菜单中搜索并打开“ODBC数据源(64位)”管理工具并进行配置。详细参考[配置ODBC数据源](../../../reference/connector/odbc/#配置数据源)。
|
**第 1 步**,在 Windows 操作系统的开始菜单中搜索并打开“ODBC数据源(64位)”管理工具并进行配置。详细参考 [配置ODBC数据源](../../../reference/connector/odbc/#配置数据源)。
|
||||||
|
|
||||||
**第 2 步**,在 Windows 系统环境下启动 Tableau,之后在其连接页面中搜索 “ODBC”,并选择 “其他数据库 (ODBC)”。
|
:::tip
|
||||||
|
需要注意的是,在为 Tableau 配置 ODBC 数据源时,TDengine ODBC 数据源配置页面中的【数据库】配置项为必填项,需选择一个可成功连接的数据库。
|
||||||
|
:::
|
||||||
|
|
||||||
|
**第 2 步**,在 Windows 系统环境下启动 Tableau,之后在其连接页面中搜索 “ODBC”,并选择 “其他数据库 (ODBC)”。 对于 Tableau 的使用的ODBC数据源,在其 TDengine ODBC 数据源配置页面的【数据库】的配置项为必填,需要选择可以连接的数据库。
|
||||||
|
|
||||||
**第 3 步**,点击 `DSN` 单选框,接着选择已配置好的数据源(MyTDengine),然后点击`连接`按钮。待连接成功后,删除字符串附加部分的内容,最后点击`登录`按钮即可。
|
**第 3 步**,点击 `DSN` 单选框,接着选择已配置好的数据源(MyTDengine),然后点击`连接`按钮。待连接成功后,删除字符串附加部分的内容,最后点击`登录`按钮即可。
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@ title: 与 Excel 集成
|
||||||
## 前置条件
|
## 前置条件
|
||||||
|
|
||||||
准备以下环境:
|
准备以下环境:
|
||||||
- TDengine 3.3.5.7 以上版本集群已部署并正常运行(企业及社区版均可)。
|
- TDengine 3.3.5.8 以上版本集群已部署并正常运行(企业及社区版均可)。
|
||||||
- taosAdapter 能够正常运行,详细参考 [taosAdapter 参考手册](../../../reference/components/taosadapter)。
|
- taosAdapter 能够正常运行,详细参考 [taosAdapter 参考手册](../../../reference/components/taosadapter)。
|
||||||
- Excel 安装并运行, 如未安装,请下载并安装, 具体操作请参考 Microsoft 官方文档。
|
- Excel 安装并运行, 如未安装,请下载并安装, 具体操作请参考 Microsoft 官方文档。
|
||||||
- 从 TDengine 官网下载最新的 Windows 操作系统 X64 客户端驱动程序并进行安装,详细参考 [安装 ODBC 驱动](../../../reference/connector/odbc/#安装)。
|
- 从 TDengine 官网下载最新的 Windows 操作系统 X64 客户端驱动程序并进行安装,详细参考 [安装 ODBC 驱动](../../../reference/connector/odbc/#安装)。
|
||||||
|
|
|
@ -10,7 +10,7 @@ DBeaver 是一款流行的跨平台数据库管理工具,方便开发者、数
|
||||||
|
|
||||||
使用 DBeaver 管理 TDengine 需要以下几方面的准备工作。
|
使用 DBeaver 管理 TDengine 需要以下几方面的准备工作。
|
||||||
|
|
||||||
- 安装 DBeaver。DBeaver 支持主流操作系统包括 Windows、macOS 和 Linux。请注意[下载](https://dbeaver.io/download/)正确平台和版本(23.1.1+)的安装包。详细安装步骤请参考 [DBeaver 官方文档](https://github.com/dbeaver/dbeaver/wiki/Installation)。
|
- 安装 DBeaver。DBeaver 支持主流操作系统包括 Windows、macOS 和 Linux。请注意 [下载](https://dbeaver.io/download/) 正确平台和版本(23.1.1+)的安装包。详细安装步骤请参考 [DBeaver 官方文档](https://github.com/dbeaver/dbeaver/wiki/Installation)。
|
||||||
- 如果使用独立部署的 TDengine 集群,请确认 TDengine 正常运行,并且 taosAdapter 已经安装并正常运行,具体细节请参考 [taosAdapter 的使用手册](../../../reference/components/taosadapter)。
|
- 如果使用独立部署的 TDengine 集群,请确认 TDengine 正常运行,并且 taosAdapter 已经安装并正常运行,具体细节请参考 [taosAdapter 的使用手册](../../../reference/components/taosadapter)。
|
||||||
|
|
||||||
## 使用 DBeaver 访问内部部署的 TDengine
|
## 使用 DBeaver 访问内部部署的 TDengine
|
||||||
|
|
|
@ -10,17 +10,16 @@ qStudio 是一款免费的多平台 SQL 数据分析工具,可以轻松浏览
|
||||||
|
|
||||||
使用 qStudio 连接 TDengine 需要以下几方面的准备工作。
|
使用 qStudio 连接 TDengine 需要以下几方面的准备工作。
|
||||||
|
|
||||||
- 安装 qStudio。qStudio 支持主流操作系统包括 Windows、macOS 和 Linux。请注意[下载](https://www.timestored.com/qstudio/download/)正确平台的安装包。
|
- 安装 qStudio。qStudio 支持主流操作系统包括 Windows、macOS 和 Linux。请注意 [下载](https://www.timestored.com/qstudio/download/) 正确平台的安装包。
|
||||||
- 安装 TDengine 实例,请确认 TDengine 正常运行,并且 taosAdapter 已经安装并正常运行,具体细节请参考 [taosAdapter 的使用手册](../../../reference/components/taosadapter)。
|
- 安装 TDengine 实例,请确认 TDengine 正常运行,并且 taosAdapter 已经安装并正常运行,具体细节请参考 [taosAdapter 的使用手册](../../../reference/components/taosadapter)。
|
||||||
|
|
||||||
## 使用 qStudio 连接 TDengine
|
## 使用 qStudio 连接 TDengine
|
||||||
|
|
||||||
1. 启动 qStudio 应用,从菜单项选择“Server” 和 “Add Server...”,然后在 Server Type 下拉框中选择 TDengine。
|
1. 启动 qStudio 应用,从菜单项选择 “Server” 和 “Add Server...”,然后在 Server Type 下拉框中选择 TDengine。
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
2. 配置 TDengine 连接,填入主机地址、端口号、用户名和密码。如果 TDengine 部署在本机,可以只填用户名和密码,默认用户名为 root,默认密码为 taosdata。点击“Test”可以对连接是否可用进行测试。如果本机没有安装 TDengine Java
|
2. 配置 TDengine 连接,填入主机地址、端口号、用户名和密码。如果 TDengine 部署在本机,可以只填用户名和密码,默认用户名为 root,默认密码为 taosdata。点击 “Test” 可以对连接是否可用进行测试。如果本机没有安装 TDengine Java 连接器,qStudio 会提示下载安装。
|
||||||
连接器,qStudio 会提示下载安装。
|
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -45,7 +45,7 @@ taosAdapter 提供了以下功能:
|
||||||
|
|
||||||
### WebSocket 接口
|
### WebSocket 接口
|
||||||
|
|
||||||
各语言连接器通过 taosAdapter 的 WebSocket 接口,能够实现 SQL 执行、无模式写入、参数绑定和数据订阅功能。参考[开发指南](../../../develop/connect/#websocket-连接)。
|
各语言连接器通过 taosAdapter 的 WebSocket 接口,能够实现 SQL 执行、无模式写入、参数绑定和数据订阅功能。参考 [开发指南](../../../develop/connect/#websocket-连接)。
|
||||||
|
|
||||||
### 兼容 InfluxDB v1 写接口
|
### 兼容 InfluxDB v1 写接口
|
||||||
|
|
||||||
|
@ -109,7 +109,7 @@ Prometheus 使用的由 \*NIX 内核暴露的硬件和操作系统指标的输
|
||||||
|
|
||||||
## 安装
|
## 安装
|
||||||
|
|
||||||
taosAdapter 是 TDengine 服务端软件 的一部分,如果您使用 TDengine server 您不需要任何额外的步骤来安装 taosAdapter。您可以从[涛思数据官方网站](https://docs.taosdata.com/releases/tdengine/)下载 TDengine server 安装包。如果需要将 taosAdapter 分离部署在 TDengine server 之外的服务器上,则应该在该服务器上安装完整的 TDengine 来安装 taosAdapter。如果您需要使用源代码编译生成 taosAdapter,您可以参考[构建 taosAdapter](https://github.com/taosdata/taosadapter/blob/3.0/BUILD-CN.md)文档。
|
taosAdapter 是 TDengine 服务端软件 的一部分,如果您使用 TDengine server 您不需要任何额外的步骤来安装 taosAdapter。您可以从 [涛思数据官方网站](https://docs.taosdata.com/releases/tdengine/)下载 TDengine server 安装包。如果需要将 taosAdapter 分离部署在 TDengine server 之外的服务器上,则应该在该服务器上安装完整的 TDengine 来安装 taosAdapter。如果您需要使用源代码编译生成 taosAdapter,您可以参考 [构建 taosAdapter](https://github.com/taosdata/taosadapter/blob/3.0/BUILD-CN.md)文档。
|
||||||
|
|
||||||
安装完成后使用命令 `systemctl start taosadapter` 可以启动 taosAdapter 服务。
|
安装完成后使用命令 `systemctl start taosadapter` 可以启动 taosAdapter 服务。
|
||||||
|
|
||||||
|
|
|
@ -42,17 +42,17 @@ tmq+ws://root:taosdata@localhost:6030/db1?timeout=never
|
||||||
- taos:使用查询接口从 TDengine 获取数据
|
- taos:使用查询接口从 TDengine 获取数据
|
||||||
- tmq:启用数据订阅从 TDengine 获取数据
|
- tmq:启用数据订阅从 TDengine 获取数据
|
||||||
- local:数据备份或恢复
|
- local:数据备份或恢复
|
||||||
- pi: 启用 pi-connector从 pi 数据库中获取数据
|
- pi:启用 pi-connector从 pi 数据库中获取数据
|
||||||
- opc:启用 opc-connector 从 opc-server 中获取数据
|
- opc:启用 opc-connector 从 opc-server 中获取数据
|
||||||
- mqtt: 启用 mqtt-connector 获取 mqtt-broker 中的数据
|
- mqtt:启用 mqtt-connector 获取 mqtt-broker 中的数据
|
||||||
- kafka: 启用 Kafka 连接器从 Kafka Topics 中订阅消息写入
|
- kafka:启用 Kafka 连接器从 Kafka Topics 中订阅消息写入
|
||||||
- influxdb: 启用 influxdb 连接器从 InfluxDB 获取数据
|
- influxdb: 启用 influxdb 连接器从 InfluxDB 获取数据
|
||||||
- csv:从 CSV 文件解析数据
|
- csv:从 CSV 文件解析数据
|
||||||
|
|
||||||
2. +protocol 包含如下选项:
|
2. +protocol 包含如下选项:
|
||||||
- +ws: 当 driver 取值为 taos 或 tmq 时使用,表示使用 rest 获取数据。不使用 +ws 则表示使用原生连接获取数据,此时需要 taosx 所在的服务器安装 taosc。
|
- +ws:当 driver 取值为 taos 或 tmq 时使用,表示使用 rest 获取数据。不使用 +ws 则表示使用原生连接获取数据,此时需要 taosx 所在的服务器安装 taosc。
|
||||||
- +ua: 当 driver 取值为 opc 时使用,表示采集的数据的 opc-server 为 opc-ua
|
- +ua:当 driver 取值为 opc 时使用,表示采集的数据的 opc-server 为 opc-ua
|
||||||
- +da: 当 driver 取值为 opc 时使用,表示采集的数据的 opc-server 为 opc-da
|
- +da:当 driver 取值为 opc 时使用,表示采集的数据的 opc-server 为 opc-da
|
||||||
|
|
||||||
3. host:port 表示数据源的地址和端口。
|
3. host:port 表示数据源的地址和端口。
|
||||||
4. object 表示具体的数据源,可以是TDengine的数据库、超级表、表,也可以是本地备份文件的路径,也可以是对应数据源服务器中的数据库。
|
4. object 表示具体的数据源,可以是TDengine的数据库、超级表、表,也可以是本地备份文件的路径,也可以是对应数据源服务器中的数据库。
|
||||||
|
@ -251,7 +251,7 @@ d4,2017-07-14T10:40:00.006+08:00,-2.740636,10,-0.893545,7,California.LosAngles
|
||||||
- `monitor.port`:`taosKeeper` 服务的端口,默认`6043`。
|
- `monitor.port`:`taosKeeper` 服务的端口,默认`6043`。
|
||||||
- `monitor.interval`:向 `taosKeeper` 发送指标的频率,默认为每 10 秒一次,只有 1 到 10 之间的值才有效。
|
- `monitor.interval`:向 `taosKeeper` 发送指标的频率,默认为每 10 秒一次,只有 1 到 10 之间的值才有效。
|
||||||
- `log.path`:日志文件存放的目录。
|
- `log.path`:日志文件存放的目录。
|
||||||
- `log.level`:日志级别,可选值为 "error", "warn", "info", "debug", "trace"。
|
- `log.level`:日志级别,可选值为 "error"、"warn"、"info"、"debug"、"trace"。
|
||||||
- `log.compress`:日志文件滚动后的文件是否进行压缩。
|
- `log.compress`:日志文件滚动后的文件是否进行压缩。
|
||||||
- `log.rotationCount`:日志文件目录下最多保留的文件数,超出数量的旧文件被删除。
|
- `log.rotationCount`:日志文件目录下最多保留的文件数,超出数量的旧文件被删除。
|
||||||
- `log.rotationSize`:触发日志文件滚动的文件大小(单位为字节),当日志文件超出此大小后会生成一个新文件,新的日志会写入新文件。
|
- `log.rotationSize`:触发日志文件滚动的文件大小(单位为字节),当日志文件超出此大小后会生成一个新文件,新的日志会写入新文件。
|
||||||
|
@ -401,17 +401,17 @@ taosX 会将监控指标上报给 taosKeeper,这些监控指标会被 taosKeep
|
||||||
| -------------------------- | ----------------------------------------------------------------------------- |
|
| -------------------------- | ----------------------------------------------------------------------------- |
|
||||||
| sys_cpu_cores | 系统 CPU 核数 |
|
| sys_cpu_cores | 系统 CPU 核数 |
|
||||||
| sys_total_memory | 系统总内存,单位:字节 |
|
| sys_total_memory | 系统总内存,单位:字节 |
|
||||||
| sys_used_memory | 系统已用内存, 单位:字节 |
|
| sys_used_memory | 系统已用内存,单位:字节 |
|
||||||
| sys_available_memory | 系统可用内存, 单位:字节 |
|
| sys_available_memory | 系统可用内存,单位:字节 |
|
||||||
| process_uptime | taosX 运行时长,单位:秒 |
|
| process_uptime | taosX 运行时长,单位:秒 |
|
||||||
| process_id | taosX 进程 ID |
|
| process_id | taosX 进程 ID |
|
||||||
| running_tasks | taosX 当前执行任务数 |
|
| running_tasks | taosX 当前执行任务数 |
|
||||||
| completed_tasks | taosX 进程在一个监控周期(比如10s)内完成的任务数 |
|
| completed_tasks | taosX 进程在一个监控周期(比如 10s)内完成的任务数 |
|
||||||
| failed_tasks | taosX 进程在一个监控周期(比如10s)内失败的任务数 |
|
| failed_tasks | taosX 进程在一个监控周期(比如 10s)内失败的任务数 |
|
||||||
| process_cpu_percent | taosX 进程占用 CPU 百分比, 单位 % |
|
| process_cpu_percent | taosX 进程占用 CPU 百分比,单位 % |
|
||||||
| process_memory_percent | taosX 进程占用内存百分比, 单位 % |
|
| process_memory_percent | taosX 进程占用内存百分比,单位 % |
|
||||||
| process_disk_read_bytes | taosX 进程在一个监控周期(比如10s)内从硬盘读取的字节数的平均值,单位 bytes/s |
|
| process_disk_read_bytes | taosX 进程在一个监控周期(比如 10s)内从硬盘读取的字节数的平均值,单位 bytes/s |
|
||||||
| process_disk_written_bytes | taosX 进程在一个监控周期(比如10s)内写到硬盘的字节数的平均值,单位 bytres/s |
|
| process_disk_written_bytes | taosX 进程在一个监控周期(比如 10s)内写到硬盘的字节数的平均值,单位 bytres/s |
|
||||||
|
|
||||||
|
|
||||||
### Agent
|
### Agent
|
||||||
|
@ -420,15 +420,15 @@ taosX 会将监控指标上报给 taosKeeper,这些监控指标会被 taosKeep
|
||||||
| -------------------------- | ----------------------------------------------------------------------------- |
|
| -------------------------- | ----------------------------------------------------------------------------- |
|
||||||
| sys_cpu_cores | 系统 CPU 核数 |
|
| sys_cpu_cores | 系统 CPU 核数 |
|
||||||
| sys_total_memory | 系统总内存,单位:字节 |
|
| sys_total_memory | 系统总内存,单位:字节 |
|
||||||
| sys_used_memory | 系统已用内存, 单位:字节 |
|
| sys_used_memory | 系统已用内存,单位:字节 |
|
||||||
| sys_available_memory | 系统可用内存, 单位:字节 |
|
| sys_available_memory | 系统可用内存,单位:字节 |
|
||||||
| process_uptime | agent 运行时长,单位:秒 |
|
| process_uptime | agent 运行时长,单位:秒 |
|
||||||
| process_id | agent 进程 id |
|
| process_id | agent 进程 id |
|
||||||
| process_cpu_percent | agent 进程占用 CPU 百分比 |
|
| process_cpu_percent | agent 进程占用 CPU 百分比 |
|
||||||
| process_memory_percent | agent 进程占用内存百分比 |
|
| process_memory_percent | agent 进程占用内存百分比 |
|
||||||
| process_uptime | 进程启动时间,单位秒 |
|
| process_uptime | 进程启动时间,单位秒 |
|
||||||
| process_disk_read_bytes | agent 进程在一个监控周期(比如10s)内从硬盘读取的字节数的平均值,单位 bytes/s |
|
| process_disk_read_bytes | agent 进程在一个监控周期(比如 10s)内从硬盘读取的字节数的平均值,单位 bytes/s |
|
||||||
| process_disk_written_bytes | agent 进程在一个监控周期(比如10s)内写到硬盘的字节数的平均值,单位 bytes/s |
|
| process_disk_written_bytes | agent 进程在一个监控周期(比如 10s)内写到硬盘的字节数的平均值,单位 bytes/s |
|
||||||
|
|
||||||
### Connector
|
### Connector
|
||||||
|
|
||||||
|
@ -436,10 +436,10 @@ taosX 会将监控指标上报给 taosKeeper,这些监控指标会被 taosKeep
|
||||||
| -------------------------- | --------------------------------------------------------------------------------- |
|
| -------------------------- | --------------------------------------------------------------------------------- |
|
||||||
| process_id | connector 进程 id |
|
| process_id | connector 进程 id |
|
||||||
| process_uptime | 进程启动时间,单位秒 |
|
| process_uptime | 进程启动时间,单位秒 |
|
||||||
| process_cpu_percent | 进程占用 CPU 百分比, 单位 % |
|
| process_cpu_percent | 进程占用 CPU 百分比,单位 % |
|
||||||
| process_memory_percent | 进程占用内存百分比, 单位 % |
|
| process_memory_percent | 进程占用内存百分比,单位 % |
|
||||||
| process_disk_read_bytes | connector 进程在一个监控周期(比如10s)内从硬盘读取的字节数的平均值,单位 bytes/s |
|
| process_disk_read_bytes | connector 进程在一个监控周期(比如 10s)内从硬盘读取的字节数的平均值,单位 bytes/s |
|
||||||
| process_disk_written_bytes | connector 进程在一个监控周期(比如10s)内写到硬盘的字节数的平均值,单位 bytes/s |
|
| process_disk_written_bytes | connector 进程在一个监控周期(比如 10s)内写到硬盘的字节数的平均值,单位 bytes/s |
|
||||||
|
|
||||||
### taosX 通用数据源任务
|
### taosX 通用数据源任务
|
||||||
|
|
||||||
|
@ -457,7 +457,7 @@ taosX 会将监控指标上报给 taosKeeper,这些监控指标会被 taosKeep
|
||||||
|
|
||||||
| 字段 | 描述 |
|
| 字段 | 描述 |
|
||||||
| --------------------- | -------------------------------------------------------------------- |
|
| --------------------- | -------------------------------------------------------------------- |
|
||||||
| read_concurrency | 并发读取数据源的数据 worker 数, 也等于并发写入 TDengine 的 worker 数 |
|
| read_concurrency | 并发读取数据源的数据 worker 数,也等于并发写入 TDengine 的 worker 数 |
|
||||||
| total_stables | 需要迁移的超级表数据数量 |
|
| total_stables | 需要迁移的超级表数据数量 |
|
||||||
| total_updated_tags | 累计更新 tag 数 |
|
| total_updated_tags | 累计更新 tag 数 |
|
||||||
| total_created_tables | 累计创建子表数 |
|
| total_created_tables | 累计创建子表数 |
|
||||||
|
@ -566,9 +566,9 @@ taosX Parser 插件是一个要求用 C/Rust 语言开发的 C ABI 兼容动态
|
||||||
|
|
||||||
**函数签名**:parser_resp_t parser_new(char* ctx, uint32_t len);
|
**函数签名**:parser_resp_t parser_new(char* ctx, uint32_t len);
|
||||||
|
|
||||||
char* ctx: 用户自定义配置字符串。
|
char* ctx:用户自定义配置字符串。
|
||||||
|
|
||||||
uint32_t len: 该字符串的二进制长度(不含 `\0`)。
|
uint32_t len:该字符串的二进制长度(不含 `\0`)。
|
||||||
|
|
||||||
**返回值**:
|
**返回值**:
|
||||||
|
|
||||||
|
@ -597,11 +597,11 @@ const char* parser_mutate(
|
||||||
);
|
);
|
||||||
```
|
```
|
||||||
|
|
||||||
`void* parser`: parser_new 生成的对象指针;
|
`void* parser`:parser_new 生成的对象指针;
|
||||||
|
|
||||||
`const uint8_t* in_ptr`:输入 Payload 的指针;
|
`const uint8_t* in_ptr`:输入 Payload 的指针;
|
||||||
|
|
||||||
`uint32_t in_len`: 输入 Payload 的 bytes 长度(不含 `\0`);
|
`uint32_t in_len`:输入 Payload 的 bytes 长度(不含 `\0`);
|
||||||
|
|
||||||
`const void* uint8_t* out_ptr`:输出 JSON 字符串的指针(不含 \0)。当 out_ptr 指向为空时,表示输出为空。
|
`const void* uint8_t* out_ptr`:输出 JSON 字符串的指针(不含 \0)。当 out_ptr 指向为空时,表示输出为空。
|
||||||
|
|
||||||
|
@ -615,4 +615,4 @@ const char* parser_mutate(
|
||||||
|
|
||||||
**函数签名**: void parser_free(void* parser);
|
**函数签名**: void parser_free(void* parser);
|
||||||
|
|
||||||
void* parser: parser_new 生成的对象指针。
|
void* parser:parser_new 生成的对象指针。
|
||||||
|
|
|
@ -3,23 +3,23 @@ title: taosX-Agent 参考手册
|
||||||
sidebar_label: taosX-Agent
|
sidebar_label: taosX-Agent
|
||||||
---
|
---
|
||||||
|
|
||||||
本节讲述如何部署 `Agent` (for `taosX`)。使用之前需要安装 TDengine Enterprise 安装包之后,taosX-Agent 用于在部分数据接入场景,如 Pi, OPC UA, OPC DA 等对访问数据源有一定限制或者网络环境特殊的场景下,可以将 taosX-Agent 部署在靠近数据源的环境中甚至与数据源在相同的服务器上,由 taosX-Agent 负责从数据源读取数据并发送给 taosX。
|
本节讲述如何部署 `Agent` (for `taosX`)。使用之前需要安装 TDengine Enterprise 安装包之后,taosX-Agent 用于在部分数据接入场景,如 Pi、OPC UA、OPC DA 等对访问数据源有一定限制或者网络环境特殊的场景下,可以将 taosX-Agent 部署在靠近数据源的环境中甚至与数据源在相同的服务器上,由 taosX-Agent 负责从数据源读取数据并发送给 taosX。
|
||||||
|
|
||||||
## 配置
|
## 配置
|
||||||
|
|
||||||
`Agent` 默认的配置文件位于 `/etc/taos/agent.toml`, 包含以下配置项:
|
`Agent` 默认的配置文件位于 `/etc/taos/agent.toml`,包含以下配置项:
|
||||||
|
|
||||||
- `endpoint`: 必填,`taosX` 的 GRPC 服务地址。
|
- `endpoint`:必填,`taosX` 的 GRPC 服务地址。
|
||||||
- `token`: 必填,在 `Explorer` 上创建 `Agent` 时,产生的 Token。
|
- `token`:必填,在 `Explorer` 上创建 `Agent` 时,产生的 Token。
|
||||||
- `instanceId`:当前 taosx-agent 服务的实例 ID,如果同一台机器上启动了多个 taosx-agent 实例,必须保证各个实例的实例 ID 互不相同。
|
- `instanceId`:当前 taosx-agent 服务的实例 ID,如果同一台机器上启动了多个 taosx-agent 实例,必须保证各个实例的实例 ID 互不相同。
|
||||||
- `compression`: 非必填,可配置为 `true` 或 `false`, 默认为 `false`。配置为`true`, 则开启 `Agent` 和 `taosX` 通信数据压缩。
|
- `compression`:非必填,可配置为 `true` 或 `false`,默认为 `false`。配置为`true`,则开启 `Agent` 和 `taosX` 通信数据压缩。
|
||||||
- `in_memory_cache_capacity`: 非必填,表示可在内存中缓存的最大消息批次数,可配置为大于 0 的整数。默认为 `64`。
|
- `in_memory_cache_capacity`:非必填,表示可在内存中缓存的最大消息批次数,可配置为大于 0 的整数。默认为 `64`。
|
||||||
- `client_port_range.min`:非必填,取值范围 `[49152-65535]`,默认为 `49152`,当 agent 向 taosx 创建 socket 连接时,socket 客户端会随机监听一个端口,此配置限制了端口范围的最小值。
|
- `client_port_range.min`:非必填,取值范围 `[49152-65535]`,默认为 `49152`,当 agent 向 taosx 创建 socket 连接时,socket 客户端会随机监听一个端口,此配置限制了端口范围的最小值。
|
||||||
- `client_port_range.max`:非必填,取值范围 `[49152-65535]`,默认为 `65535`,此配置限制了端口范围的最大值。
|
- `client_port_range.max`:非必填,取值范围 `[49152-65535]`,默认为 `65535`,此配置限制了端口范围的最大值。
|
||||||
- `log_level`: 非必填,日志级别,默认为 `info`, 同 `taosX` 一样,支持 `error`,`warn`,`info`,`debug`,`trace` 五级。已弃用,请使用 `log.level` 代替。
|
- `log_level`:非必填,日志级别,默认为 `info`,同 `taosX` 一样,支持 `error`、`warn`、`info`、`debug`、`trace` 五级。已弃用,请使用 `log.level` 代替。
|
||||||
- `log_keep_days`:非必填,日志保存天数,默认为 `30` 天。已弃用,请使用 `log.keepDays` 代替。
|
- `log_keep_days`:非必填,日志保存天数,默认为 `30` 天。已弃用,请使用 `log.keepDays` 代替。
|
||||||
- `log.path`:日志文件存放的目录。
|
- `log.path`:日志文件存放的目录。
|
||||||
- `log.level`:日志级别,可选值为 "error", "warn", "info", "debug", "trace"。
|
- `log.level`:日志级别,可选值为 "error"、"warn"、"info"、"debug"、"trace"。
|
||||||
- `log.compress`:日志文件滚动后的文件是否进行压缩。
|
- `log.compress`:日志文件滚动后的文件是否进行压缩。
|
||||||
- `log.rotationCount`:日志文件目录下最多保留的文件数,超出数量的旧文件被删除。
|
- `log.rotationCount`:日志文件目录下最多保留的文件数,超出数量的旧文件被删除。
|
||||||
- `log.rotationSize`:触发日志文件滚动的文件大小(单位为字节),当日志文件超出此大小后会生成一个新文件,新的日志会写入新文件。
|
- `log.rotationSize`:触发日志文件滚动的文件大小(单位为字节),当日志文件超出此大小后会生成一个新文件,新的日志会写入新文件。
|
||||||
|
|
|
@ -13,7 +13,7 @@ taosKeeper 是 TDengine 3.0 版本监控指标的导出工具,通过简单的
|
||||||
|
|
||||||
taosKeeper 有两种安装方式:
|
taosKeeper 有两种安装方式:
|
||||||
|
|
||||||
- 安装 TDengine 官方安装包的同时会自动安装 taosKeeper, 详情请参考[TDengine 安装](../../../get-started/)。
|
- 安装 TDengine 官方安装包的同时会自动安装 taosKeeper,详情请参考 [TDengine 安装](../../../get-started/)。
|
||||||
|
|
||||||
- 单独编译 taosKeeper 并安装,详情请参考 [taosKeeper](https://github.com/taosdata/taoskeeper) 仓库。
|
- 单独编译 taosKeeper 并安装,详情请参考 [taosKeeper](https://github.com/taosdata/taoskeeper) 仓库。
|
||||||
|
|
||||||
|
@ -64,7 +64,7 @@ Usage of taoskeeper v3.3.3.0:
|
||||||
### 配置文件
|
### 配置文件
|
||||||
|
|
||||||
taosKeeper 支持用 `taoskeeper -c <keeper config file>` 命令来指定配置文件。
|
taosKeeper 支持用 `taoskeeper -c <keeper config file>` 命令来指定配置文件。
|
||||||
若不指定配置文件,taosKeeper 会使用默认配置文件,其路径为: `/etc/taos/taoskeeper.toml` 。
|
若不指定配置文件,taosKeeper 会使用默认配置文件,其路径为:`/etc/taos/taoskeeper.toml` 。
|
||||||
若既不指定 taosKeeper 配置文件,且 `/etc/taos/taoskeeper.toml` 也不存在,将使用默认配置。
|
若既不指定 taosKeeper 配置文件,且 `/etc/taos/taoskeeper.toml` 也不存在,将使用默认配置。
|
||||||
|
|
||||||
**下面是配置文件的示例:**
|
**下面是配置文件的示例:**
|
||||||
|
@ -198,7 +198,7 @@ Active: inactive (dead)
|
||||||
|
|
||||||
:::info
|
:::info
|
||||||
|
|
||||||
- `launchctl` 命令管理`com.tdengine.taoskeeper`需要管理员权限,务必在前面加 `sudo` 来增强安全性。
|
- `launchctl` 命令管理 `com.tdengine.taoskeeper` 需要管理员权限,务必在前面加 `sudo` 来增强安全性。
|
||||||
- `sudo launchctl list | grep taoskeeper` 指令返回的第一列是 `taoskeeper` 程序的 PID,若为 `-` 则说明 taoskeeper 服务未运行。
|
- `sudo launchctl list | grep taoskeeper` 指令返回的第一列是 `taoskeeper` 程序的 PID,若为 `-` 则说明 taoskeeper 服务未运行。
|
||||||
- 故障排查:如果服务异常请查看日志获取更多信息。日志文件默认放在 `/var/log/taos` 下。
|
- 故障排查:如果服务异常请查看日志获取更多信息。日志文件默认放在 `/var/log/taos` 下。
|
||||||
|
|
||||||
|
@ -314,7 +314,7 @@ taos_cluster_info_first_ep_dnode_id{cluster_id="554014120921134497"} 1
|
||||||
|
|
||||||
##### 监控信息支持的标签
|
##### 监控信息支持的标签
|
||||||
|
|
||||||
- `cluster_id`: 集群 id
|
- `cluster_id`:集群 id
|
||||||
|
|
||||||
##### 相关指标及其含义
|
##### 相关指标及其含义
|
||||||
|
|
||||||
|
@ -346,15 +346,15 @@ taos_cluster_info_first_ep_dnode_id{cluster_id="554014120921134497"} 1
|
||||||
|
|
||||||
##### 监控信息支持的标签
|
##### 监控信息支持的标签
|
||||||
|
|
||||||
- `cluster_id`: 集群 id
|
- `cluster_id`:集群 id
|
||||||
- `dnode_ep`: dnode 端点
|
- `dnode_ep`:dnode 端点
|
||||||
- `dnode_id`:dnode id
|
- `dnode_id`:dnode id
|
||||||
|
|
||||||
##### 相关指标及其含义
|
##### 相关指标及其含义
|
||||||
|
|
||||||
| 指标名称 | 类型 | 含义 |
|
| 指标名称 | 类型 | 含义 |
|
||||||
| ------------------------------ | ------- | ---------------------------------------------------------------------------------------- |
|
| ------------------------------ | ------- | ---------------------------------------------------------------------------------------- |
|
||||||
| taos_d_info_status | gauge | dnode 状态,标签 value 表示状态, ready 表示正常, offline 表示下线, unknown 表示未知。 |
|
| taos_d_info_status | gauge | dnode 状态,标签 value 表示状态、ready 表示正常、offline 表示下线、unknown 表示未知。 |
|
||||||
| taos_dnodes_info_cpu_cores | gauge | CPU 核心数 |
|
| taos_dnodes_info_cpu_cores | gauge | CPU 核心数 |
|
||||||
| taos_dnodes_info_cpu_engine | gauge | 该 dnode 的进程所使用的 CPU 百分比(取值范围 0~100) |
|
| taos_dnodes_info_cpu_engine | gauge | 该 dnode 的进程所使用的 CPU 百分比(取值范围 0~100) |
|
||||||
| taos_dnodes_info_cpu_system | gauge | 该 dnode 所在节点的系统使用的 CPU 百分比(取值范围 0~100) |
|
| taos_dnodes_info_cpu_system | gauge | 该 dnode 所在节点的系统使用的 CPU 百分比(取值范围 0~100) |
|
||||||
|
@ -381,8 +381,8 @@ taos_cluster_info_first_ep_dnode_id{cluster_id="554014120921134497"} 1
|
||||||
|
|
||||||
##### 监控信息支持的标签
|
##### 监控信息支持的标签
|
||||||
|
|
||||||
- `cluster_id`: 集群 id
|
- `cluster_id`:集群 id
|
||||||
- `dnode_ep`: dnode 端点
|
- `dnode_ep`:dnode 端点
|
||||||
- `dnode_id`:dnode id
|
- `dnode_id`:dnode id
|
||||||
- `data_dir_name`:数据目录名
|
- `data_dir_name`:数据目录名
|
||||||
- `data_dir_level`:数据目录级别
|
- `data_dir_level`:数据目录级别
|
||||||
|
@ -399,8 +399,8 @@ taos_cluster_info_first_ep_dnode_id{cluster_id="554014120921134497"} 1
|
||||||
|
|
||||||
##### 监控信息支持的标签
|
##### 监控信息支持的标签
|
||||||
|
|
||||||
- `cluster_id`: 集群 id
|
- `cluster_id`:集群 id
|
||||||
- `dnode_ep`: dnode 端点
|
- `dnode_ep`:dnode 端点
|
||||||
- `dnode_id`:dnode id
|
- `dnode_id`:dnode id
|
||||||
- `log_dir_name`:日志目录名
|
- `log_dir_name`:日志目录名
|
||||||
|
|
||||||
|
@ -416,8 +416,8 @@ taos_cluster_info_first_ep_dnode_id{cluster_id="554014120921134497"} 1
|
||||||
|
|
||||||
##### 监控信息支持的标签
|
##### 监控信息支持的标签
|
||||||
|
|
||||||
- `cluster_id`: 集群 id
|
- `cluster_id`:集群 id
|
||||||
- `dnode_ep`: dnode 端点
|
- `dnode_ep`:dnode 端点
|
||||||
- `dnode_id`:dnode id
|
- `dnode_id`:dnode id
|
||||||
|
|
||||||
##### 相关指标及其含义
|
##### 相关指标及其含义
|
||||||
|
@ -460,7 +460,7 @@ taos_cluster_info_first_ep_dnode_id{cluster_id="554014120921134497"} 1
|
||||||
|
|
||||||
##### 监控信息支持的标签
|
##### 监控信息支持的标签
|
||||||
|
|
||||||
- `identify`: 节点 endpoint
|
- `identify`:节点 endpoint
|
||||||
|
|
||||||
##### 相关指标及其含义
|
##### 相关指标及其含义
|
||||||
|
|
||||||
|
@ -474,64 +474,64 @@ taos_cluster_info_first_ep_dnode_id{cluster_id="554014120921134497"} 1
|
||||||
##### taos_m_info_role
|
##### taos_m_info_role
|
||||||
|
|
||||||
- **标签**:
|
- **标签**:
|
||||||
- `cluster_id`: 集群 id
|
- `cluster_id`:集群 id
|
||||||
- `mnode_ep`: mnode 端点
|
- `mnode_ep`:mnode 端点
|
||||||
- `mnode_id`: mnode id
|
- `mnode_id`:mnode id
|
||||||
- `value`: 角色值(该 mnode 的状态,取值范围:offline, follower, candidate, leader, error, learner)
|
- `value`:角色值(该 mnode 的状态,取值范围:offline、follower、candidate、leader、error、learner)
|
||||||
- **类型**: gauge
|
- **类型**:gauge
|
||||||
- **含义**: mnode 角色
|
- **含义**:mnode 角色
|
||||||
|
|
||||||
##### taos_taos_sql_req_count
|
##### taos_taos_sql_req_count
|
||||||
|
|
||||||
- **标签**:
|
- **标签**:
|
||||||
- `cluster_id`: 集群 id
|
- `cluster_id`:集群 id
|
||||||
- `result`: 请求结果(取值范围: Success, Failed)
|
- `result`:请求结果(取值范围:Success、Failed)
|
||||||
- `sql_type`: SQL 类型(取值范围:select, insert,inserted_rows, delete)
|
- `sql_type`:SQL 类型(取值范围:select、insert、inserted_rows、delete)
|
||||||
- `username`: 用户名
|
- `username`:用户名
|
||||||
- **类型**: gauge
|
- **类型**:gauge
|
||||||
- **含义**: SQL 请求数量
|
- **含义**:SQL 请求数量
|
||||||
|
|
||||||
##### taos_taosd_sql_req_count
|
##### taos_taosd_sql_req_count
|
||||||
|
|
||||||
- **标签**:
|
- **标签**:
|
||||||
- `cluster_id`: 集群 id
|
- `cluster_id`:集群 id
|
||||||
- `dnode_ep`: dnode 端点
|
- `dnode_ep`:dnode 端点
|
||||||
- `dnode_id`: dnode id
|
- `dnode_id`:dnode id
|
||||||
- `result`: 请求结果(取值范围: Success, Failed)
|
- `result`:请求结果(取值范围:Success、Failed)
|
||||||
- `sql_type`: SQL 类型(取值范围:select, insert,inserted_rows, delete)
|
- `sql_type`:SQL 类型(取值范围:select、insert、inserted_rows、delete)
|
||||||
- `username`: 用户名
|
- `username`:用户名
|
||||||
- `vgroup_id`: 虚拟组 id
|
- `vgroup_id`:虚拟组 id
|
||||||
- **类型**: gauge
|
- **类型**:gauge
|
||||||
- **含义**: SQL 请求数量
|
- **含义**:SQL 请求数量
|
||||||
|
|
||||||
##### taos_taosd_vgroups_info_status
|
##### taos_taosd_vgroups_info_status
|
||||||
|
|
||||||
- **标签**:
|
- **标签**:
|
||||||
- `cluster_id`: 集群 id
|
- `cluster_id`:集群 id
|
||||||
- `database_name`: 数据库名称
|
- `database_name`:数据库名称
|
||||||
- `vgroup_id`: 虚拟组 id
|
- `vgroup_id`:虚拟组 id
|
||||||
- **类型**: gauge
|
- **类型**:gauge
|
||||||
- **含义**: 虚拟组状态。 0 为 unsynced,表示没有 leader 选出;1 为 ready。
|
- **含义**:虚拟组状态。 0 为 unsynced,表示没有 leader 选出;1 为 ready。
|
||||||
|
|
||||||
##### taos_taosd_vgroups_info_tables_num
|
##### taos_taosd_vgroups_info_tables_num
|
||||||
|
|
||||||
- **标签**:
|
- **标签**:
|
||||||
- `cluster_id`: 集群 id
|
- `cluster_id`:集群 id
|
||||||
- `database_name`: 数据库名称
|
- `database_name`:数据库名称
|
||||||
- `vgroup_id`: 虚拟组 id
|
- `vgroup_id`:虚拟组 id
|
||||||
- **类型**: gauge
|
- **类型**:gauge
|
||||||
- **含义**: 虚拟组表数量
|
- **含义**:虚拟组表数量
|
||||||
|
|
||||||
##### taos_taosd_vnodes_info_role
|
##### taos_taosd_vnodes_info_role
|
||||||
|
|
||||||
- **标签**:
|
- **标签**:
|
||||||
- `cluster_id`: 集群 id
|
- `cluster_id`:集群 id
|
||||||
- `database_name`: 数据库名称
|
- `database_name`:数据库名称
|
||||||
- `dnode_id`: dnode id
|
- `dnode_id`:dnode id
|
||||||
- `value`: 角色值(取值范围:offline, follower, candidate, leader, error, learner)
|
- `value`:角色值(取值范围:offline、follower、candidate、leader、error、learner)
|
||||||
- `vgroup_id`: 虚拟组 id
|
- `vgroup_id`:虚拟组 id
|
||||||
- **类型**: gauge
|
- **类型**:gauge
|
||||||
- **含义**: 虚拟节点角色
|
- **含义**:虚拟节点角色
|
||||||
|
|
||||||
### 抽取配置
|
### 抽取配置
|
||||||
|
|
||||||
|
|
|
@ -128,7 +128,7 @@ cors = true
|
||||||
- `addr`:taosExplorer 服务绑定的 IPv4 地址,默认为 `0.0.0.0`。如需修改,请配置为 `localhost` 之外的地址以对外提供服务。
|
- `addr`:taosExplorer 服务绑定的 IPv4 地址,默认为 `0.0.0.0`。如需修改,请配置为 `localhost` 之外的地址以对外提供服务。
|
||||||
- `ipv6`:taosExplorer 服务绑定的 IPv6 地址,默认不绑定 IPv6 地址。
|
- `ipv6`:taosExplorer 服务绑定的 IPv6 地址,默认不绑定 IPv6 地址。
|
||||||
- `instanceId`:当前 explorer 服务的实例 ID,如果同一台机器上启动了多个 explorer 实例,必须保证各个实例的实例 ID 互不相同。
|
- `instanceId`:当前 explorer 服务的实例 ID,如果同一台机器上启动了多个 explorer 实例,必须保证各个实例的实例 ID 互不相同。
|
||||||
- `log_level`:日志级别,可选值为 "error", "warn", "info", "debug", "trace"。此参数已弃用,请使用 `log.level` 代替。
|
- `log_level`:日志级别,可选值为 "error"、"warn"、"info"、"debug"、"trace"。此参数已弃用,请使用 `log.level` 代替。
|
||||||
- `cluster`:TDengine 集群的 taosAdapter 地址。
|
- `cluster`:TDengine 集群的 taosAdapter 地址。
|
||||||
- `cluster_native`:TDengine 集群的原生连接地址,默认关闭。
|
- `cluster_native`:TDengine 集群的原生连接地址,默认关闭。
|
||||||
- `x_api`:taosX 的 gRPC 地址。
|
- `x_api`:taosX 的 gRPC 地址。
|
||||||
|
@ -137,7 +137,7 @@ cors = true
|
||||||
- `ssl.certificate`:SSL 证书(如果同时设置了 certificate 与 certificate_key 两个参数,则启用 HTTPS 服务,否则不启用)。
|
- `ssl.certificate`:SSL 证书(如果同时设置了 certificate 与 certificate_key 两个参数,则启用 HTTPS 服务,否则不启用)。
|
||||||
- `ssl.certificate_key`:SSL 证书密钥。
|
- `ssl.certificate_key`:SSL 证书密钥。
|
||||||
- `log.path`:日志文件存放的目录。
|
- `log.path`:日志文件存放的目录。
|
||||||
- `log.level`:日志级别,可选值为 "error", "warn", "info", "debug", "trace"。
|
- `log.level`:日志级别,可选值为 "error"、"warn"、"info"、"debug"、"trace"。
|
||||||
- `log.compress`:日志文件滚动后的文件是否进行压缩。
|
- `log.compress`:日志文件滚动后的文件是否进行压缩。
|
||||||
- `log.rotationCount`:日志文件目录下最多保留的文件数,超出数量的旧文件被删除。
|
- `log.rotationCount`:日志文件目录下最多保留的文件数,超出数量的旧文件被删除。
|
||||||
- `log.rotationSize`:触发日志文件滚动的文件大小(单位为字节),当日志文件超出此大小后会生成一个新文件,新的日志会写入新文件。
|
- `log.rotationSize`:触发日志文件滚动的文件大小(单位为字节),当日志文件超出此大小后会生成一个新文件,新的日志会写入新文件。
|
||||||
|
@ -220,10 +220,10 @@ sc.exe stop taos-explorer # Windows
|
||||||
|
|
||||||
## 注册登录
|
## 注册登录
|
||||||
|
|
||||||
安装好,打开浏览器,默认访问`http://ip:6060`来访问 taos-explorer 服务。如果还没有注册过,则首先进入注册界面。输入手机号获取验证码,输入正确的验证码后,即可注册成功。
|
安装好,打开浏览器,默认访问 `http://ip:6060` 来访问 taos-explorer 服务。如果还没有注册过,则首先进入注册界面。输入手机号获取验证码,输入正确的验证码后,即可注册成功。
|
||||||
|
|
||||||
登录时,请使用数据库用户名和密码登录。首次使用,默认的用户名为 `root`,密码为 `taosdata`。登录成功后即可进入`数据浏览器`页面,您可以使用查看数据库、 创建数据库、创建超级表/子表等管理功能。
|
登录时,请使用数据库用户名和密码登录。首次使用,默认的用户名为 `root`,密码为 `taosdata`。登录成功后即可进入`数据浏览器`页面,您可以使用查看数据库、 创建数据库、创建超级表/子表等管理功能。
|
||||||
|
|
||||||
其他功能页面,如`数据写入-数据源`等页面,为企业版特有功能,您可以点击查看和简单体验,并不能实际使用。
|
其他功能页面,如 `数据写入-数据源` 等页面,为企业版特有功能,您可以点击查看和简单体验,并不能实际使用。
|
||||||
|
|
||||||
如果由于网络原因无法完成注册环节,则需要在有外网的环境注册完毕,然后把注册好的 /etc/taos/explorer-register.cfg 替换到内网环境。
|
如果由于网络原因无法完成注册环节,则需要在有外网的环境注册完毕,然后把注册好的 `/etc/taos/explorer-register.cfg` 替换到内网环境。
|
||||||
|
|
|
@ -37,23 +37,23 @@ taos> quit
|
||||||
### 基础参数
|
### 基础参数
|
||||||
可通过配置命令行参数来改变 TDengine CLI 的行为。以下为常用的几个命令行参数:
|
可通过配置命令行参数来改变 TDengine CLI 的行为。以下为常用的几个命令行参数:
|
||||||
|
|
||||||
- -h HOST: 要连接的 TDengine 服务端所在服务器的 FQDN, 默认值: 127.0.0.1 。
|
- -h HOST:要连接的 TDengine 服务端所在服务器的 FQDN, 默认值:127.0.0.1。
|
||||||
- -P PORT: 指定服务端所用端口号,默认值:6030 。
|
- -P PORT:指定服务端所用端口号,默认值:6030。
|
||||||
- -u USER: 连接时使用的用户名,默认值:root 。
|
- -u USER:连接时使用的用户名,默认值:root。
|
||||||
- -p PASSWORD: 连接服务端时使用的密码,特殊字符如 `! & ( ) < > ; |` 需使用字符 `\` 进行转义处理, 默认值:taosdata 。
|
- -p PASSWORD:连接服务端时使用的密码,特殊字符如 `! & ( ) < > ; |` 需使用字符 `\` 进行转义处理, 默认值:taosdata。
|
||||||
- -?, --help: 打印出所有命令行参数。
|
- -?, --help:打印出所有命令行参数。
|
||||||
- -s COMMAND: 以非交互模式执行的 SQL 命令。
|
- -s COMMAND:以非交互模式执行的 SQL 命令。
|
||||||
|
|
||||||
使用 `-s` 参数可进行非交互式执行 SQL,执行完成后退出,此模式适合在自动化脚本中使用。
|
使用 `-s` 参数可进行非交互式执行 SQL,执行完成后退出,此模式适合在自动化脚本中使用。
|
||||||
如以下命令连接到服务器 h1.taos.com, 执行 -s 指定的 SQL:
|
如以下命令连接到服务器 h1.taos.com, 执行 -s 指定的 SQL:
|
||||||
```bash
|
```bash
|
||||||
taos -h my-server -s "use db; show tables;"
|
taos -h my-server -s "use db; show tables;"
|
||||||
```
|
```
|
||||||
|
|
||||||
- -c CONFIGDIR: 指定配置文件目录。
|
- -c CONFIGDIR:指定配置文件目录。
|
||||||
|
|
||||||
Linux 环境下默认为 `/etc/taos`,该目录下的配置文件默认名称为 `taos.cfg` 。
|
Linux 环境下默认为 `/etc/taos`,该目录下的配置文件默认名称为 `taos.cfg`。
|
||||||
使用 `-c` 参数改变 `taosc` 客户端加载配置文件的位置,客户端配置参数参考 [客户端配置](../../components/taosc) 。
|
使用 `-c` 参数改变 `taosc` 客户端加载配置文件的位置,客户端配置参数参考 [客户端配置](../../components/taosc)。
|
||||||
以下命令指定了 `taosc` 客户端加载 `/root/cfg/` 下的 `taos.cfg` 配置文件。
|
以下命令指定了 `taosc` 客户端加载 `/root/cfg/` 下的 `taos.cfg` 配置文件。
|
||||||
```bash
|
```bash
|
||||||
taos -c /root/cfg/
|
taos -c /root/cfg/
|
||||||
|
@ -61,30 +61,30 @@ taos> quit
|
||||||
|
|
||||||
### 高级参数
|
### 高级参数
|
||||||
|
|
||||||
- -a AUTHSTR: 连接服务端的授权信息。
|
- -a AUTHSTR:连接服务端的授权信息。
|
||||||
- -A: 通过用户名和密码计算授权信息。
|
- -A:通过用户名和密码计算授权信息。
|
||||||
- -B: 设置 BI 工具显示模式,设置后所有输出都遵循 BI 工具的格式进行输出。
|
- -B:设置 BI 工具显示模式,设置后所有输出都遵循 BI 工具的格式进行输出。
|
||||||
- -C: 打印 -c 指定的目录中 `taos.cfg` 的配置参数。
|
- -C:打印 -c 指定的目录中 `taos.cfg` 的配置参数。
|
||||||
- -d DATABASE: 指定连接到服务端时使用的数据库。
|
- -d DATABASE:指定连接到服务端时使用的数据库。
|
||||||
- -E dsn: 使用 WebSocket DSN 连接云服务或者提供 WebSocket 连接的服务端。
|
- -E dsn:使用 WebSocket DSN 连接云服务或者提供 WebSocket 连接的服务端。
|
||||||
- -f FILE: 以非交互模式执行 SQL 脚本文件。文件中一个 SQL 语句只能占一行。
|
- -f FILE:以非交互模式执行 SQL 脚本文件。文件中一个 SQL 语句只能占一行。
|
||||||
- -k: 测试服务端运行状态,0: unavailable,1: network ok,2: service ok,3: service degraded,4: exiting 。
|
- -k:测试服务端运行状态,0:unavailable、1:network ok、2:service ok、3:service degraded、4:exiting。
|
||||||
- -l PKTLEN: 网络测试时使用的测试包大小。
|
- -l PKTLEN:网络测试时使用的测试包大小。
|
||||||
- -n NETROLE: 网络连接测试时的测试范围,默认为 `client`, 可选值为 `client`、`server` 。
|
- -n NETROLE:网络连接测试时的测试范围,默认为 `client`,可选值为 `client`、`server`。
|
||||||
- -N PKTNUM: 网络测试时使用的测试包数量。
|
- -N PKTNUM:网络测试时使用的测试包数量。
|
||||||
- -r: 将时间列转化为无符号 64 位整数类型输出(即 C 语言中 uint64_t) 。
|
- -r:将时间列转化为无符号 64 位整数类型输出(即 C 语言中 uint64_t)。
|
||||||
- -R: 使用 RESTful 模式连接服务端。
|
- -R:使用 RESTful 模式连接服务端。
|
||||||
- -t: 测试服务端启动状态,状态同 -k 。
|
- -t:测试服务端启动状态,状态同 -k。
|
||||||
- -w DISPLAYWIDTH: 客户端列显示宽度。
|
- -w DISPLAYWIDTH:客户端列显示宽度。
|
||||||
- -z TIMEZONE: 指定时区,默认为本地时区。
|
- -z TIMEZONE:指定时区,默认为本地时区。
|
||||||
- -V: 打印出当前版本号。
|
- -V:打印出当前版本号。
|
||||||
|
|
||||||
|
|
||||||
## 数据导出/导入
|
## 数据导出/导入
|
||||||
|
|
||||||
### 数据导出
|
### 数据导出
|
||||||
|
|
||||||
- 可以使用符号 “>>” 导出查询结果到某个文件中,语法为: sql 查询语句 >> ‘输出文件名’; 输出文件如果不写路径的话,将输出至当前目录下。如 `select * from d0 >> ‘/root/d0.csv’;` 将把查询结果输出到 /root/d0.csv 中。
|
- 可以使用符号 “>>” 导出查询结果到某个文件中,语法为:sql 查询语句 >> ‘输出文件名’; 输出文件如果不写路径的话,将输出至当前目录下。如 `select * from d0 >> ‘/root/d0.csv’;` 将把查询结果输出到 /root/d0.csv 中。
|
||||||
|
|
||||||
### 数据导入
|
### 数据导入
|
||||||
|
|
||||||
|
@ -105,7 +105,7 @@ taos> source <filename>;
|
||||||
- TAB 键前为空命令状态下按 TAB 键,会列出 TDengine CLI 支持的所有命令。
|
- TAB 键前为空命令状态下按 TAB 键,会列出 TDengine CLI 支持的所有命令。
|
||||||
- TAB 键前为空格状态下按 TAB 键,会显示此位置可以出现的所有命令词的第一个,再次按 TAB 键切为下一个。
|
- TAB 键前为空格状态下按 TAB 键,会显示此位置可以出现的所有命令词的第一个,再次按 TAB 键切为下一个。
|
||||||
- TAB 键前为字符串,会搜索与此字符串前缀匹配的所有可出现命令词,并显示第一个,再次按 TAB 键切为下一个。
|
- TAB 键前为字符串,会搜索与此字符串前缀匹配的所有可出现命令词,并显示第一个,再次按 TAB 键切为下一个。
|
||||||
- 输入反斜杠 `\` + TAB 键, 会自动补全为列显示模式命令词 `\G;` 。
|
- 输入反斜杠 `\` + TAB 键, 会自动补全为列显示模式命令词 `\G;`。
|
||||||
|
|
||||||
### 设置字符列显示宽度
|
### 设置字符列显示宽度
|
||||||
|
|
||||||
|
@ -120,10 +120,10 @@ taos> SET MAX_BINARY_DISPLAY_WIDTH 120;
|
||||||
### 其它
|
### 其它
|
||||||
|
|
||||||
- 可以使用上下光标键查看历史输入的指令。
|
- 可以使用上下光标键查看历史输入的指令。
|
||||||
- 在 TDengine CLI 中使用 `alter user` 命令可以修改用户密码,缺省密码为 `taosdata` 。
|
- 在 TDengine CLI 中使用 `alter user` 命令可以修改用户密码,缺省密码为 `taosdata`。
|
||||||
- Ctrl+C 中止正在进行中的查询。
|
- Ctrl+C 中止正在进行中的查询。
|
||||||
- 执行 `RESET QUERY CACHE` 可清除本地表 Schema 的缓存。
|
- 执行 `RESET QUERY CACHE` 可清除本地表 Schema 的缓存。
|
||||||
- 批量执行 SQL 语句。可以将一系列的 TDengine CLI 命令(以英文 ; 结尾,每个 SQL 语句为一行)按行存放在文件里,在 TDengine CLI 里执行命令 `source <file-name>` 自动执行该文件里所有的 SQL 语句。
|
- 批量执行 SQL 语句。可以将一系列的 TDengine CLI 命令(以英文 `;` 结尾,每个 SQL 语句为一行)按行存放在文件里,在 TDengine CLI 里执行命令 `source <file-name>` 自动执行该文件里所有的 SQL 语句。
|
||||||
|
|
||||||
## 错误代码表
|
## 错误代码表
|
||||||
在 TDengine 3.3.4.8 版本后 TDengine CLI 在返回错误信息中返回了具体错误码,用户可到 TDengine 官网错误码页面查找具体原因及解决措施,见:[错误码参考表](https://docs.taosdata.com/reference/error-code/)
|
在 TDengine 3.3.4.8 版本后 TDengine CLI 在返回错误信息中返回了具体错误码,用户可到 TDengine 官网错误码页面查找具体原因及解决措施,见:[错误码参考表](https://docs.taosdata.com/reference/error-code/)
|
||||||
|
|
|
@ -4,7 +4,7 @@ sidebar_label: taosdump
|
||||||
toc_max_heading_level: 4
|
toc_max_heading_level: 4
|
||||||
---
|
---
|
||||||
|
|
||||||
taosdump 是为开源用户提供的 TDengine 数据备份/恢复工具,备份数据文件采用标准 [ Apache AVRO ](https://avro.apache.org/) 格式,方便与外界生态交换数据。taosdump 提供多种数据备份及恢复选项来满足不同需求,可通过 --help 查看支持的全部选项。
|
taosdump 是为开源用户提供的 TDengine 数据备份/恢复工具,备份数据文件采用标准 [Apache AVRO](https://avro.apache.org/) 格式,方便与外界生态交换数据。taosdump 提供多种数据备份及恢复选项来满足不同需求,可通过 --help 查看支持的全部选项。
|
||||||
|
|
||||||
## 工具获取
|
## 工具获取
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@ taosBenchmark 是 TDengine 服务器及客户端安装包中默认安装组件
|
||||||
|
|
||||||
## 运行
|
## 运行
|
||||||
|
|
||||||
taosBenchmark 支持无参数、命令行、配置文件三种运行模式,`命令行` 为 `配置文件` 功能子集,两者同时使用时,以命令行方式优先。
|
taosBenchmark 支持无参数、命令行、配置文件三种运行模式,`命令行` 为 `配置文件` 功能子集,两者同时使用时,以命令行方式优先。
|
||||||
|
|
||||||
:::tip
|
:::tip
|
||||||
在运行 taosBenchmark 之前要确保 TDengine 集群已经在正确运行。
|
在运行 taosBenchmark 之前要确保 TDengine 集群已经在正确运行。
|
||||||
|
@ -24,18 +24,18 @@ taosBenchmark 支持无参数、命令行、配置文件三种运行模式,`
|
||||||
taosBenchmark
|
taosBenchmark
|
||||||
```
|
```
|
||||||
|
|
||||||
在无参数运行时,taosBenchmark 默认连接 `/etc/taos/taos.cfg` 中指定的 TDengine 集群。
|
在无参数运行时,taosBenchmark 默认连接 `/etc/taos/taos.cfg` 中指定的 TDengine 集群。
|
||||||
连接成功后,会默认创建智能电表示例数据库 test,创建超级表 meters, 创建子表 1 万,每子写入数据 1 万条,若 test 库已存在,默认会先删再建。
|
连接成功后,会默认创建智能电表示例数据库 test,创建超级表 meters,创建子表 1 万,每子写入数据 1 万条,若 test 库已存在,默认会先删再建。
|
||||||
|
|
||||||
### 命令行模式
|
### 命令行模式
|
||||||
|
|
||||||
命令行支持的参数为写入功能中使用较为频繁的参数,查询与订阅功能不支持命令行方式。
|
命令行支持的参数为写入功能中使用较为频繁的参数,查询与订阅功能不支持命令行方式。
|
||||||
示例:
|
示例:
|
||||||
```bash
|
```bash
|
||||||
taosBenchmark -d db -t 100 -n 1000 -T 4 -I stmt -y
|
taosBenchmark -d db -t 100 -n 1000 -T 4 -I stmt -y
|
||||||
```
|
```
|
||||||
|
|
||||||
此命令表示使用 `taosBenchmark` 将创建一个名为 `db` 的数据库,并建立默认超级表 `meters`,子表 100 ,使用参数绑定(stmt)方式为每张子表写入 1000 条记录。
|
此命令表示使用 `taosBenchmark` 将创建一个名为 `db` 的数据库,并建立默认超级表 `meters`,子表 100,使用参数绑定(stmt)方式为每张子表写入 1000 条记录。
|
||||||
|
|
||||||
### 配置文件模式
|
### 配置文件模式
|
||||||
|
|
||||||
|
@ -52,28 +52,28 @@ taosBenchmark -f <json file>
|
||||||
| -c/--config-dir \<dir> | TDengine 集群配置文件所在的目录,默认路径是 /etc/taos |
|
| -c/--config-dir \<dir> | TDengine 集群配置文件所在的目录,默认路径是 /etc/taos |
|
||||||
| -h/--host \<host> | 指定要连接的 TDengine 服务端的 FQDN,默认值为 localhost |
|
| -h/--host \<host> | 指定要连接的 TDengine 服务端的 FQDN,默认值为 localhost |
|
||||||
| -P/--port \<port> | 要连接的 TDengine 服务器的端口号,默认值为 6030 |
|
| -P/--port \<port> | 要连接的 TDengine 服务器的端口号,默认值为 6030 |
|
||||||
| -I/--interface \<insertMode> | 插入模式,可选项有 taosc, rest, stmt, sml, sml-rest, 分别对应普通写入、restful 接口写入、参数绑定接口写入、schemaless 接口写入、restful schemaless 接口写入 (由 taosAdapter 提供)。默认值为 taosc |
|
| -I/--interface \<insertMode> | 插入模式,可选项有 taosc、rest、stmt、sml、sml-rest,分别对应普通写入、restful 接口写入、参数绑定接口写入、schemaless 接口写入、restful schemaless 接口写入 (由 taosAdapter 提供)。默认值为 taosc |
|
||||||
| -u/--user \<user> | 用于连接 TDengine 服务端的用户名,默认为 root |
|
| -u/--user \<user> | 用于连接 TDengine 服务端的用户名,默认为 root |
|
||||||
| -U/--supplement-insert | 写入数据而不提前建数据库和表,默认关闭 |
|
| -U/--supplement-insert | 写入数据而不提前建数据库和表,默认关闭 |
|
||||||
| -p/--password \<passwd> | 用于连接 TDengine 服务端的密码,默认值为 taosdata |
|
| -p/--password \<passwd> | 用于连接 TDengine 服务端的密码,默认值为 taosdata |
|
||||||
| -o/--output \<file> | 结果输出文件的路径,默认值为 ./output.txt |
|
| -o/--output \<file> | 结果输出文件的路径,默认值为 ./output.txt |
|
||||||
| -T/--thread \<threadNum> | 插入数据的线程数量,默认为 8 |
|
| -T/--thread \<threadNum> | 插入数据的线程数量,默认为 8 |
|
||||||
| -B/--interlace-rows \<rowNum> |启用交错插入模式并同时指定向每个子表每次插入的数据行数。交错插入模式是指依次向每张子表插入由本参数所指定的行数并重复这个过程,直到所有子表的数据都插入完成。默认值为 0, 即向一张子表完成数据插入后才会向下一张子表进行数据插入 |
|
| -B/--interlace-rows \<rowNum> |启用交错插入模式并同时指定向每个子表每次插入的数据行数。交错插入模式是指依次向每张子表插入由本参数所指定的行数并重复这个过程,直到所有子表的数据都插入完成。默认值为 0,即向一张子表完成数据插入后才会向下一张子表进行数据插入 |
|
||||||
| -i/--insert-interval \<timeInterval> | 指定交错插入模式的插入间隔,单位为 ms,默认值为 0。 只有当 `-B/--interlace-rows` 大于 0 时才起作用 |意味着数据插入线程在为每个子表插入隔行扫描记录后,会等待该值指定的时间间隔后再进行下一轮写入 |
|
| -i/--insert-interval \<timeInterval> | 指定交错插入模式的插入间隔,单位为 ms,默认值为 0。只有当 `-B/--interlace-rows` 大于 0 时才起作用 |意味着数据插入线程在为每个子表插入隔行扫描记录后,会等待该值指定的时间间隔后再进行下一轮写入 |
|
||||||
| -r/--rec-per-req \<rowNum> | 每次向 TDengine 请求写入的数据行数,默认值为 30000 |
|
| -r/--rec-per-req \<rowNum> | 每次向 TDengine 请求写入的数据行数,默认值为 30000 |
|
||||||
| -t/--tables \<tableNum> | 指定子表的数量,默认为 10000 |
|
| -t/--tables \<tableNum> | 指定子表的数量,默认为 10000 |
|
||||||
| -S/--timestampstep \<stepLength> | 每个子表中插入数据的时间戳步长,单位是 ms,默认值是 1 |
|
| -S/--timestampstep \<stepLength> | 每个子表中插入数据的时间戳步长,单位是 ms,默认值是 1 |
|
||||||
| -n/--records \<recordNum> | 每个子表插入的记录数,默认值为 10000 |
|
| -n/--records \<recordNum> | 每个子表插入的记录数,默认值为 10000 |
|
||||||
| -d/--database \<dbName> | 所使用的数据库的名称,默认值为 test |
|
| -d/--database \<dbName> | 所使用的数据库的名称,默认值为 test |
|
||||||
| -b/--data-type \<colType> | 指定超级表普通列数据类型, 多个使用逗号分隔,默认值: "FLOAT,INT,FLOAT" 如:`taosBenchmark -b "FLOAT,BINARY(8),NCHAR(16)"`|
|
| -b/--data-type \<colType> | 指定超级表普通列数据类型,多个使用逗号分隔,默认值:"FLOAT,INT,FLOAT" 如:`taosBenchmark -b "FLOAT,BINARY(8),NCHAR(16)"`|
|
||||||
| -A/--tag-type \<tagType> | 指定超级表标签列数据类型,多个使用逗号分隔,默认值: "INT,BINARY(24)" 如:`taosBenchmark -A "INT,BINARY(8),NCHAR(8)"`|
|
| -A/--tag-type \<tagType> | 指定超级表标签列数据类型,多个使用逗号分隔,默认值:"INT,BINARY(24)" 如:`taosBenchmark -A "INT,BINARY(8),NCHAR(8)"`|
|
||||||
| -l/--columns \<colNum> | 超级表的数据列的总数量。如果同时设置了该参数和 `-b/--data-type`,则最后的结果列数为两者取大。如果本参数指定的数量大于 `-b/--data-type` 指定的列数,则未指定的列类型默认为 INT, 例如: `-l 5 -b float,double`, 那么最后的列为 `FLOAT,DOUBLE,INT,INT,INT`。如果 columns 指定的数量小于或等于 `-b/--data-type` 指定的列数,则结果为 `-b/--data-type` 指定的列和类型,例如: `-l 3 -b float,double,float,bigint`,那么最后的列为 `FLOAT,DOUBLE,FLOAT,BIGINT` |
|
| -l/--columns \<colNum> | 超级表的数据列的总数量。如果同时设置了该参数和 `-b/--data-type`,则最后的结果列数为两者取大。如果本参数指定的数量大于 `-b/--data-type` 指定的列数,则未指定的列类型默认为 INT,例如 `-l 5 -b float,double`,那么最后的列为 `FLOAT,DOUBLE,INT,INT,INT`。如果 columns 指定的数量小于或等于 `-b/--data-type` 指定的列数,则结果为 `-b/--data-type` 指定的列和类型,例如:`-l 3 -b float,double,float,bigint`,那么最后的列为 `FLOAT,DOUBLE,FLOAT,BIGINT` |
|
||||||
| -L/--partial-col-num \<colNum> | 指定某些列写入数据,其他列数据为 NULL。默认所有列都写入数据 |
|
| -L/--partial-col-num \<colNum> | 指定某些列写入数据,其他列数据为 NULL。默认所有列都写入数据 |
|
||||||
| -w/--binwidth \<length> | nchar 和 binary 类型的默认长度,默认值为 64 |
|
| -w/--binwidth \<length> | nchar 和 binary 类型的默认长度,默认值为 64 |
|
||||||
| -m/--table-prefix \<tablePrefix> | 子表名称的前缀,默认值为 "d" |
|
| -m/--table-prefix \<tablePrefix> | 子表名称的前缀,默认值为 "d" |
|
||||||
| -E/--escape-character | 开关参数,指定在超级表和子表名称中是否使用转义字符。默认值为不使用 |
|
| -E/--escape-character | 开关参数,指定在超级表和子表名称中是否使用转义字符。默认值为不使用 |
|
||||||
| -C/--chinese | 开关参数,指定 nchar 和 binary 是否使用 Unicode 中文字符。默认值为不使用 |
|
| -C/--chinese | 开关参数,指定 nchar 和 binary 是否使用 Unicode 中文字符。默认值为不使用 |
|
||||||
| -N/--normal-table | 开关参数,指定只创建普通表,不创建超级表。默认值为 false。仅当插入模式为 taosc, stmt, rest 模式下可以使用 |
|
| -N/--normal-table | 开关参数,指定只创建普通表,不创建超级表。默认值为 false。仅当插入模式为 taosc、stmt、rest 模式下可以使用 |
|
||||||
| -M/--random | 开关参数,插入数据为生成的随机值。默认值为 false。若配置此参数,则随机生成要插入的数据。对于数值类型的 标签列/数据列,其值为该类型取值范围内的随机值。对于 NCHAR 和 BINARY 类型的 标签列/数据列,其值为指定长度范围内的随机字符串 |
|
| -M/--random | 开关参数,插入数据为生成的随机值。默认值为 false。若配置此参数,则随机生成要插入的数据。对于数值类型的 标签列/数据列,其值为该类型取值范围内的随机值。对于 NCHAR 和 BINARY 类型的 标签列/数据列,其值为指定长度范围内的随机字符串 |
|
||||||
| -x/--aggr-func | 开关参数,指示插入后查询聚合函数。默认值为 false |
|
| -x/--aggr-func | 开关参数,指示插入后查询聚合函数。默认值为 false |
|
||||||
| -y/--answer-yes | 开关参数,要求用户在提示后确认才能继续 |默认值为 false 。
|
| -y/--answer-yes | 开关参数,要求用户在提示后确认才能继续 |默认值为 false 。
|
||||||
|
@ -93,162 +93,162 @@ taosBenchmark -f <json file>
|
||||||
|
|
||||||
本节所列参数适用于所有功能模式。
|
本节所列参数适用于所有功能模式。
|
||||||
|
|
||||||
- **filetype** : 功能分类,可选值为 `insert`, `query` 和 `subscribe`。分别对应插入、查询和订阅功能。每个配置文件中只能指定其中之一。
|
- **filetype**:功能分类,可选值为 `insert`、`query` 和 `subscribe`。分别对应插入、查询和订阅功能。每个配置文件中只能指定其中之一。
|
||||||
- **cfgdir** : TDengine 客户端配置文件所在的目录,默认路径是 /etc/taos 。
|
- **cfgdir**:TDengine 客户端配置文件所在的目录,默认路径是 /etc/taos 。
|
||||||
|
|
||||||
- **host** : 指定要连接的 TDengine 服务端的 FQDN,默认值为 localhost 。
|
- **host**:指定要连接的 TDengine 服务端的 FQDN,默认值为 localhost 。
|
||||||
|
|
||||||
- **port** : 要连接的 TDengine 服务器的端口号,默认值为 6030 。
|
- **port**:要连接的 TDengine 服务器的端口号,默认值为 6030 。
|
||||||
|
|
||||||
- **user** : 用于连接 TDengine 服务端的用户名,默认为 root 。
|
- **user**:用于连接 TDengine 服务端的用户名,默认为 root 。
|
||||||
|
|
||||||
- **password** : 用于连接 TDengine 服务端的密码,默认值为 taosdata。
|
- **password**:用于连接 TDengine 服务端的密码,默认值为 taosdata。
|
||||||
|
|
||||||
### 写入配置参数
|
### 写入配置参数
|
||||||
|
|
||||||
写入场景下 `filetype` 必须设置为 `insert`,该参数及其它通用参数详见 [通用配置参数](#通用配置参数)
|
写入场景下 `filetype` 必须设置为 `insert`,该参数及其它通用参数详见 [通用配置参数](#通用配置参数)
|
||||||
|
|
||||||
- **keep_trying** : 失败后进行重试的次数,默认不重试。需使用 v3.0.9 以上版本。
|
- **keep_trying**:失败后进行重试的次数,默认不重试。需使用 v3.0.9 以上版本。
|
||||||
|
|
||||||
- **trying_interval** : 失败重试间隔时间,单位为毫秒,仅在 keep_trying 指定重试后有效。需使用 v3.0.9 以上版本。
|
- **trying_interval**:失败重试间隔时间,单位为毫秒,仅在 keep_trying 指定重试后有效。需使用 v3.0.9 以上版本。
|
||||||
- **childtable_from 和 childtable_to** : 指定写入子表范围,开闭区间为 [childtable_from, childtable_to) 。
|
- **childtable_from 和 childtable_to**:指定写入子表范围,开闭区间为 [childtable_from, childtable_to) 。
|
||||||
|
|
||||||
- **continue_if_fail** : 允许用户定义失败后行为。
|
- **continue_if_fail**:允许用户定义失败后行为。
|
||||||
|
|
||||||
"continue_if_fail": "no", 失败 taosBenchmark 自动退出,默认行为。
|
“continue_if_fail”:“no”,失败 taosBenchmark 自动退出,默认行为。
|
||||||
"continue_if_fail": "yes", 失败 taosBenchmark 警告用户,并继续写入。
|
“continue_if_fail”:“yes”,失败 taosBenchmark 警告用户,并继续写入。
|
||||||
"continue_if_fail": "smart", 如果子表不存在失败,taosBenchmark 会建立子表并继续写入。
|
“continue_if_fail”:“smart”,如果子表不存在失败,taosBenchmark 会建立子表并继续写入。
|
||||||
|
|
||||||
#### 数据库相关
|
#### 数据库相关
|
||||||
|
|
||||||
创建数据库时的相关参数在 json 配置文件中的 `dbinfo` 中配置,个别具体参数如下。其余参数均与 TDengine 中 `create database` 时所指定的数据库参数相对应,详见[../../taos-sql/database]
|
创建数据库时的相关参数在 json 配置文件中的 `dbinfo` 中配置,个别具体参数如下。其余参数均与 TDengine 中 `create database` 时所指定的数据库参数相对应,详见[../../taos-sql/database]
|
||||||
|
|
||||||
- **name** : 数据库名。
|
- **name**:数据库名。
|
||||||
|
|
||||||
- **drop** : 数据库已存在时是否删除,可选项为 "yes" 或 "no", 默认为 "yes" 。
|
- **drop**:数据库已存在时是否删除,可选项为 "yes" 或 "no",默认为 “yes” 。
|
||||||
|
|
||||||
#### 超级表相关
|
#### 超级表相关
|
||||||
|
|
||||||
创建超级表时的相关参数在 json 配置文件中的 `super_tables` 中配置,具体参数如下。
|
创建超级表时的相关参数在 json 配置文件中的 `super_tables` 中配置,具体参数如下。
|
||||||
|
|
||||||
- **name**: 超级表名,必须配置,没有默认值。
|
- **name**:超级表名,必须配置,没有默认值。
|
||||||
|
|
||||||
- **child_table_exists** : 子表是否已经存在,默认值为 "no",可选值为 "yes" 或 "no" 。
|
- **child_table_exists**:子表是否已经存在,默认值为 "no",可选值为 "yes" 或 "no" 。
|
||||||
|
|
||||||
- **childtable_count** : 子表的数量,默认值为 10。
|
- **childtable_count**:子表的数量,默认值为 10。
|
||||||
|
|
||||||
- **childtable_prefix** : 子表名称的前缀,必选配置项,没有默认值。
|
- **childtable_prefix**:子表名称的前缀,必选配置项,没有默认值。
|
||||||
|
|
||||||
- **escape_character** : 超级表和子表名称中是否包含转义字符,默认值为 "no",可选值为 "yes" 或 "no" 。
|
- **escape_character**:超级表和子表名称中是否包含转义字符,默认值为 "no",可选值为 "yes" 或 "no" 。
|
||||||
|
|
||||||
- **auto_create_table** : 仅当 insert_mode 为 taosc, rest, stmt 并且 child_table_exists 为 "no" 时生效,该参数为 "yes" 表示 taosBenchmark 在插入数据时会自动创建不存在的表;为 "no" 则表示先提前建好所有表再进行插入。
|
- **auto_create_table**:仅当 insert_mode 为 taosc、rest、stmt 并且 child_table_exists 为 "no" 时生效,该参数为 "yes" 表示 taosBenchmark 在插入数据时会自动创建不存在的表;为 "no" 则表示先提前建好所有表再进行插入。
|
||||||
|
|
||||||
- **batch_create_tbl_num** : 创建子表时每批次的建表数量,默认为 10。注:实际的批数不一定与该值相同,当执行的 SQL 语句大于支持的最大长度时,会自动截断再执行,继续创建。
|
- **batch_create_tbl_num**:创建子表时每批次的建表数量,默认为 10。注:实际的批数不一定与该值相同,当执行的 SQL 语句大于支持的最大长度时,会自动截断再执行,继续创建。
|
||||||
|
|
||||||
- **data_source** : 数据的来源,默认为 taosBenchmark 随机产生,可以配置为 "rand" 和 "sample"。为 "sample" 时使用 sample_file 参数指定的文件内的数据。
|
- **data_source**:数据的来源,默认为 taosBenchmark 随机产生,可以配置为 "rand" 和 "sample"。为 "sample" 时使用 sample_file 参数指定的文件内的数据。
|
||||||
|
|
||||||
- **insert_mode** : 插入模式,可选项有 taosc, rest, stmt, sml, sml-rest, 分别对应普通写入、restful 接口写入、参数绑定接口写入、schemaless 接口写入、restful schemaless 接口写入 (由 taosAdapter 提供)。默认值为 taosc 。
|
- **insert_mode**:插入模式,可选项有 taosc、rest、stmt、sml、sml-rest,分别对应普通写入、restful 接口写入、参数绑定接口写入、schemaless 接口写入、restful schemaless 接口写入 (由 taosAdapter 提供)。默认值为 taosc 。
|
||||||
|
|
||||||
- **non_stop_mode** : 指定是否持续写入,若为 "yes" 则 insert_rows 失效,直到 Ctrl + C 停止程序,写入才会停止。默认值为 "no",即写入指定数量的记录后停止。注:即使在持续写入模式下 insert_rows 失效,但其也必须被配置为一个非零正整数。
|
- **non_stop_mode**:指定是否持续写入,若为 "yes" 则 insert_rows 失效,直到 Ctrl + C 停止程序,写入才会停止。默认值为 "no",即写入指定数量的记录后停止。注:即使在持续写入模式下 insert_rows 失效,但其也必须被配置为一个非零正整数。
|
||||||
|
|
||||||
- **line_protocol** : 使用行协议插入数据,仅当 insert_mode 为 sml 或 sml-rest 时生效,可选项为 line, telnet, json 。
|
- **line_protocol**:使用行协议插入数据,仅当 insert_mode 为 sml 或 sml-rest 时生效,可选项为 line、telnet、json 。
|
||||||
|
|
||||||
- **tcp_transfer** : telnet 模式下的通信协议,仅当 insert_mode 为 sml-rest 并且 line_protocol 为 telnet 时生效。如果不配置,则默认为 http 协议。
|
- **tcp_transfer**:telnet 模式下的通信协议,仅当 insert_mode 为 sml-rest 并且 line_protocol 为 telnet 时生效。如果不配置,则默认为 http 协议。
|
||||||
|
|
||||||
- **insert_rows** : 每个子表插入的记录数,默认为 0 。
|
- **insert_rows**:每个子表插入的记录数,默认为 0 。
|
||||||
|
|
||||||
- **childtable_offset** : 仅当 child_table_exists 为 yes 时生效,指定从超级表获取子表列表时的偏移量,即从第几个子表开始。
|
- **childtable_offset**:仅当 child_table_exists 为 yes 时生效,指定从超级表获取子表列表时的偏移量,即从第几个子表开始。
|
||||||
|
|
||||||
- **childtable_limit** : 仅当 child_table_exists 为 yes 时生效,指定从超级表获取子表列表的上限。
|
- **childtable_limit**:仅当 child_table_exists 为 yes 时生效,指定从超级表获取子表列表的上限。
|
||||||
|
|
||||||
- **interlace_rows** : 启用交错插入模式并同时指定向每个子表每次插入的数据行数。交错插入模式是指依次向每张子表插入由本参数所指定的行数并重复这个过程,直到所有子表的数据都插入完成。默认值为 0, 即向一张子表完成数据插入后才会向下一张子表进行数据插入。
|
- **interlace_rows**:启用交错插入模式并同时指定向每个子表每次插入的数据行数。交错插入模式是指依次向每张子表插入由本参数所指定的行数并重复这个过程,直到所有子表的数据都插入完成。默认值为 0,即向一张子表完成数据插入后才会向下一张子表进行数据插入。
|
||||||
|
|
||||||
- **insert_interval** : 指定交错插入模式的插入间隔,单位为 ms,默认值为 0。 只有当 `-B/--interlace-rows` 大于 0 时才起作用。意味着数据插入线程在为每个子表插入隔行扫描记录后,会等待该值指定的时间间隔后再进行下一轮写入。
|
- **insert_interval**:指定交错插入模式的插入间隔,单位为 ms,默认值为 0。只有当 `-B/--interlace-rows` 大于 0 时才起作用。意味着数据插入线程在为每个子表插入隔行扫描记录后,会等待该值指定的时间间隔后再进行下一轮写入。
|
||||||
|
|
||||||
- **partial_col_num** : 若该值为正数 n 时, 则仅向前 n 列写入,仅当 insert_mode 为 taosc 和 rest 时生效,如果 n 为 0 则是向全部列写入。
|
- **partial_col_num**:若该值为正数 n 时,则仅向前 n 列写入,仅当 insert_mode 为 taosc 和 rest 时生效,如果 n 为 0 则是向全部列写入。
|
||||||
|
|
||||||
- **disorder_ratio** : 指定乱序数据的百分比概率,其值域为 [0,50]。默认为 0,即没有乱序数据。
|
- **disorder_ratio**:指定乱序数据的百分比概率,其值域为 [0,50]。默认为 0,即没有乱序数据。
|
||||||
|
|
||||||
- **disorder_range** : 指定乱序数据的时间戳回退范围。所生成的乱序时间戳为非乱序情况下应该使用的时间戳减去这个范围内的一个随机值。仅在 `-O/--disorder` 指定的乱序数据百分比大于 0 时有效。
|
- **disorder_range**:指定乱序数据的时间戳回退范围。所生成的乱序时间戳为非乱序情况下应该使用的时间戳减去这个范围内的一个随机值。仅在 `-O/--disorder` 指定的乱序数据百分比大于 0 时有效。
|
||||||
|
|
||||||
- **timestamp_step** : 每个子表中插入数据的时间戳步长,单位与数据库的 `precision` 一致,默认值是 1 。
|
- **timestamp_step**:每个子表中插入数据的时间戳步长,单位与数据库的 `precision` 一致,默认值是 1 。
|
||||||
|
|
||||||
- **start_timestamp** : 每个子表的时间戳起始值,默认值是 now 。
|
- **start_timestamp**:每个子表的时间戳起始值,默认值是 now 。
|
||||||
|
|
||||||
- **sample_format** : 样本数据文件的类型,现在只支持 "csv" 。
|
- **sample_format**:样本数据文件的类型,现在只支持 "csv" 。
|
||||||
|
|
||||||
- **sample_file** : 指定 csv 格式的文件作为数据源,仅当 data_source 为 sample 时生效。若 csv 文件内的数据行数小于等于 prepared_rand,那么会循环读取 csv 文件数据直到与 prepared_rand 相同;否则则会只读取 prepared_rand 个数的行的数据。也即最终生成的数据行数为二者取小。
|
- **sample_file**:指定 csv 格式的文件作为数据源,仅当 data_source 为 sample 时生效。若 csv 文件内的数据行数小于等于 prepared_rand,那么会循环读取 csv 文件数据直到与 prepared_rand 相同;否则则会只读取 prepared_rand 个数的行的数据。也即最终生成的数据行数为二者取小。
|
||||||
|
|
||||||
- **use_sample_ts** : 仅当 data_source 为 sample 时生效,表示 sample_file 指定的 csv 文件内是否包含第一列时间戳,默认为 no。 若设置为 yes, 则使用 csv 文件第一列作为时间戳,由于同一子表时间戳不能重复,生成的数据量取决于 csv 文件内的数据行数相同,此时 insert_rows 失效。
|
- **use_sample_ts**:仅当 data_source 为 sample 时生效,表示 sample_file 指定的 csv 文件内是否包含第一列时间戳,默认为 no。若设置为 yes,则使用 csv 文件第一列作为时间戳,由于同一子表时间戳不能重复,生成的数据量取决于 csv 文件内的数据行数相同,此时 insert_rows 失效。
|
||||||
|
|
||||||
- **tags_file** : 仅当 insert_mode 为 taosc, rest 的模式下生效。 最终的 tag 的数值与 childtable_count 有关,如果 csv 文件内的 tag 数据行小于给定的子表数量,那么会循环读取 csv 文件数据直到生成 childtable_count 指定的子表数量;否则则只会读取 childtable_count 行 tag 数据。也即最终生成的子表数量为二者取小。
|
- **tags_file**:仅当 insert_mode 为 taosc,rest 的模式下生效。最终的 tag 的数值与 childtable_count 有关,如果 csv 文件内的 tag 数据行小于给定的子表数量,那么会循环读取 csv 文件数据直到生成 childtable_count 指定的子表数量;否则则只会读取 childtable_count 行 tag 数据。也即最终生成的子表数量为二者取小。
|
||||||
|
|
||||||
- **primary_key** : 指定超级表是否有复合主键,取值 1 和 0, 复合主键列只能是超级表的第二列,指定生成复合主键后要确保第二列符合复合主键的数据类型,否则会报错。
|
- **primary_key**:指定超级表是否有复合主键,取值 1 和 0,复合主键列只能是超级表的第二列,指定生成复合主键后要确保第二列符合复合主键的数据类型,否则会报错。
|
||||||
- **repeat_ts_min** : 数值类型,复合主键开启情况下指定生成相同时间戳记录的最小个数,生成相同时间戳记录的个数是在范围[repeat_ts_min, repeat_ts_max] 内的随机值, 最小值等于最大值时为固定个数。
|
- **repeat_ts_min**:数值类型,复合主键开启情况下指定生成相同时间戳记录的最小个数,生成相同时间戳记录的个数是在范围[repeat_ts_min, repeat_ts_max] 内的随机值,最小值等于最大值时为固定个数。
|
||||||
- **repeat_ts_max** : 数值类型,复合主键开启情况下指定生成相同时间戳记录的最大个数。
|
- **repeat_ts_max**:数值类型,复合主键开启情况下指定生成相同时间戳记录的最大个数。
|
||||||
- **sqls** : 字符串数组类型,指定超级表创建成功后要执行的 sql 数组,sql 中指定表名前面要带数据库名,否则会报未指定数据库错误。
|
- **sqls**:字符串数组类型,指定超级表创建成功后要执行的 sql 数组,sql 中指定表名前面要带数据库名,否则会报未指定数据库错误。
|
||||||
|
|
||||||
|
|
||||||
#### 标签列与数据列
|
#### 标签列与数据列
|
||||||
|
|
||||||
指定超级表标签列与数据列的配置参数分别在 `super_tables` 中的 `columns` 和 `tag` 中。
|
指定超级表标签列与数据列的配置参数分别在 `super_tables` 中的 `columns` 和 `tag` 中。
|
||||||
|
|
||||||
- **type** : 指定列类型,可选值请参考 TDengine 支持的数据类型。
|
- **type**:指定列类型,可选值请参考 TDengine 支持的数据类型。
|
||||||
注:JSON 数据类型比较特殊,只能用于标签,当使用 JSON 类型作为 tag 时有且只能有这一个标签,此时 count 和 len 代表的意义分别是 JSON tag 内的 key-value pair 的个数和每个 KV pair 的 value 的值的长度,value 默认为 string。
|
注:JSON 数据类型比较特殊,只能用于标签,当使用 JSON 类型作为 tag 时有且只能有这一个标签,此时 count 和 len 代表的意义分别是 JSON tag 内的 key-value pair 的个数和每个 KV pair 的 value 的值的长度,value 默认为 string。
|
||||||
|
|
||||||
- **len** : 指定该数据类型的长度,对 NCHAR,BINARY 和 JSON 数据类型有效。如果对其他数据类型配置了该参数,若为 0 , 则代表该列始终都是以 null 值写入;如果不为 0 则被忽略。
|
- **len**:指定该数据类型的长度,对 NCHAR,BINARY 和 JSON 数据类型有效。如果对其他数据类型配置了该参数,若为 0,则代表该列始终都是以 null 值写入;如果不为 0 则被忽略。
|
||||||
|
|
||||||
- **count** : 指定该类型列连续出现的数量,例如 "count": 4096 即可生成 4096 个指定类型的列。
|
- **count**:指定该类型列连续出现的数量,例如 "count":4096 即可生成 4096 个指定类型的列。
|
||||||
|
|
||||||
- **name** : 列的名字,若与 count 同时使用,比如 "name":"current", "count":3, 则 3 个列的名字分别为 current, current_2. current_3。
|
- **name**:列的名字,若与 count 同时使用,比如 "name":"current","count":3,则 3 个列的名字分别为 current、current_2、current_3。
|
||||||
|
|
||||||
- **min** : 数据类型的 列/标签 的最小值。生成的值将大于或等于最小值。
|
- **min**:数据类型的 列/标签 的最小值。生成的值将大于或等于最小值。
|
||||||
|
|
||||||
- **max** : 数据类型的 列/标签 的最大值。生成的值将小于最大值。
|
- **max**:数据类型的 列/标签 的最大值。生成的值将小于最大值。
|
||||||
|
|
||||||
- **scalingFactor** : 浮点数精度增强因子,仅当数据类型是 float/double 时生效,有效值范围为 1 至 1000000 的正整数。用于增强生成浮点数的精度,特别是在 min 或 max 值较小的情况下。此属性按 10 的幂次增强小数点后的精度:scalingFactor 为 10 表示增强 1 位小数精度,100 表示增强 2 位,依此类推。
|
- **scalingFactor**:浮点数精度增强因子,仅当数据类型是 float/double 时生效,有效值范围为 1 至 1000000 的正整数。用于增强生成浮点数的精度,特别是在 min 或 max 值较小的情况下。此属性按 10 的幂次增强小数点后的精度:scalingFactor 为 10 表示增强 1 位小数精度,100 表示增强 2 位,依此类推。
|
||||||
|
|
||||||
- **fun** : 此列数据以函数填充,目前只支持 sin 和 cos 两函数,输入参数为时间戳换算成角度值,换算公式: 角度 x = 输入的时间列ts值 % 360。同时支持系数调节,随机波动因子调节,以固定格式的表达式展现,如 fun="10\*sin(x)+100\*random(5)" , x 表示角度,取值 0 ~ 360度,增长步长与时间列步长一致。10 表示乘的系数,100 表示加或减的系数,5 表示波动幅度在 5% 的随机范围内。目前支持的数据类型为 int, bigint, float, double 四种数据类型。注意:表达式为固定模式,不可前后颠倒。
|
- **fun**:此列数据以函数填充,目前只支持 sin 和 cos 两函数,输入参数为时间戳换算成角度值,换算公式:角度 x = 输入的时间列ts值 % 360。同时支持系数调节,随机波动因子调节,以固定格式的表达式展现,如 fun=“10\*sin(x)+100\*random(5)” , x 表示角度,取值 0 ~ 360度,增长步长与时间列步长一致。10 表示乘的系数,100 表示加或减的系数,5 表示波动幅度在 5% 的随机范围内。目前支持的数据类型为 int、bigint、float、double 四种数据类型。注意:表达式为固定模式,不可前后颠倒。
|
||||||
|
|
||||||
- **values** : nchar/binary 列/标签的值域,将从值中随机选择。
|
- **values**:nchar/binary 列/标签的值域,将从值中随机选择。
|
||||||
|
|
||||||
- **sma**: 将该列加入 SMA 中,值为 "yes" 或者 "no",默认为 "no" 。
|
- **sma**:将该列加入 SMA 中,值为 "yes" 或者 "no",默认为 "no" 。
|
||||||
|
|
||||||
- **encode**: 字符串类型,指定此列两级压缩中的第一级编码算法,详细参见创建超级表。
|
- **encode**:字符串类型,指定此列两级压缩中的第一级编码算法,详细参见创建超级表。
|
||||||
|
|
||||||
- **compress**: 字符串类型,指定此列两级压缩中的第二级加密算法,详细参见创建超级表。
|
- **compress**:字符串类型,指定此列两级压缩中的第二级加密算法,详细参见创建超级表。
|
||||||
|
|
||||||
- **level**: 字符串类型,指定此列两级压缩中的第二级加密算法的压缩率高低,详细参见创建超级表。
|
- **level**:字符串类型,指定此列两级压缩中的第二级加密算法的压缩率高低,详细参见创建超级表。
|
||||||
|
|
||||||
- **gen**: 字符串类型,指定此列生成数据的方式,不指定为随机,若指定为 "order", 会按自然数顺序增长。
|
- **gen**:字符串类型,指定此列生成数据的方式,不指定为随机,若指定为 “order”,会按自然数顺序增长。
|
||||||
|
|
||||||
- **fillNull**: 字符串类型,指定此列是否随机插入 NULL 值,可指定为 "true" 或 "false", 只有当 generate_row_rule 为 2 时有效。
|
- **fillNull**:字符串类型,指定此列是否随机插入 NULL 值,可指定为 “true” 或 "false",只有当 generate_row_rule 为 2 时有效。
|
||||||
|
|
||||||
#### 写入行为相关
|
#### 写入行为相关
|
||||||
|
|
||||||
- **thread_count** : 插入数据的线程数量,默认为 8。
|
- **thread_count**:插入数据的线程数量,默认为 8。
|
||||||
|
|
||||||
- **thread_bind_vgroup** : 写入时 vgroup 是否和写入线程绑定,绑定后可提升写入速度, 取值为 "yes" 或 "no",默认值为 "no", 设置为 "no" 后与原来行为一致。 当设为 "yes" 时,如果 thread_count 大于写入数据库 vgroups 数量, thread_count 自动调整为 vgroups 数量;如果 thread_count 小于 vgroups 数量,写入线程数量不做调整,一个线程写完一个 vgroup 数据后再写下一个,同时保持一个 vgroup 同时只能由一个线程写入的规则。
|
- **thread_bind_vgroup**:写入时 vgroup 是否和写入线程绑定,绑定后可提升写入速度,取值为 "yes" 或 "no",默认值为 “no”,设置为 “no” 后与原来行为一致。当设为 “yes” 时,如果 thread_count 大于写入数据库 vgroups 数量,thread_count 自动调整为 vgroups 数量;如果 thread_count 小于 vgroups 数量,写入线程数量不做调整,一个线程写完一个 vgroup 数据后再写下一个,同时保持一个 vgroup 同时只能由一个线程写入的规则。
|
||||||
|
|
||||||
- **create_table_thread_count** : 建表的线程数量,默认为 8。
|
- **create_table_thread_count**:建表的线程数量,默认为 8。
|
||||||
|
|
||||||
- **result_file** : 结果输出文件的路径,默认值为 ./output.txt 。
|
- **result_file**:结果输出文件的路径,默认值为 ./output.txt 。
|
||||||
|
|
||||||
- **confirm_parameter_prompt** : 开关参数,要求用户在提示后确认才能继续, 可取值 "yes" or "no"。默认值为 "no" 。
|
- **confirm_parameter_prompt**:开关参数,要求用户在提示后确认才能继续,可取值 "yes" or "no"。默认值为 "no" 。
|
||||||
|
|
||||||
- **interlace_rows** : 启用交错插入模式并同时指定向每个子表每次插入的数据行数。交错插入模式是指依次向每张子表插入由本参数所指定的行数并重复这个过程,直到所有子表的数据都插入完成。默认值为 0, 即向一张子表完成数据插入后才会向下一张子表进行数据插入。
|
- **interlace_rows**:启用交错插入模式并同时指定向每个子表每次插入的数据行数。交错插入模式是指依次向每张子表插入由本参数所指定的行数并重复这个过程,直到所有子表的数据都插入完成。默认值为 0,即向一张子表完成数据插入后才会向下一张子表进行数据插入。
|
||||||
在 `super_tables` 中也可以配置该参数,若配置则以 `super_tables` 中的配置为高优先级,覆盖全局设置。
|
在 `super_tables` 中也可以配置该参数,若配置则以 `super_tables` 中的配置为高优先级,覆盖全局设置。
|
||||||
|
|
||||||
- **insert_interval** :
|
- **insert_interval**:
|
||||||
指定交错插入模式的插入间隔,单位为 ms,默认值为 0。 只有当 `-B/--interlace-rows` 大于 0 时才起作用。意味着数据插入线程在为每个子表插入隔行扫描记录后,会等待该值指定的时间间隔后再进行下一轮写入。
|
指定交错插入模式的插入间隔,单位为 ms,默认值为 0。只有当 `-B/--interlace-rows` 大于 0 时才起作用。意味着数据插入线程在为每个子表插入隔行扫描记录后,会等待该值指定的时间间隔后再进行下一轮写入。
|
||||||
在 `super_tables` 中也可以配置该参数,若配置则以 `super_tables` 中的配置为高优先级,覆盖全局设置。
|
在 `super_tables` 中也可以配置该参数,若配置则以 `super_tables` 中的配置为高优先级,覆盖全局设置。
|
||||||
|
|
||||||
- **num_of_records_per_req** :
|
- **num_of_records_per_req**:
|
||||||
每次向 TDengine 请求写入的数据行数,默认值为 30000 。当其设置过大时,TDengine 客户端驱动会返回相应的错误信息,此时需要调低这个参数的设置以满足写入要求。
|
每次向 TDengine 请求写入的数据行数,默认值为 30000 。当其设置过大时,TDengine 客户端驱动会返回相应的错误信息,此时需要调低这个参数的设置以满足写入要求。
|
||||||
|
|
||||||
- **prepare_rand** : 生成的随机数据中唯一值的数量。若为 1 则表示所有数据都相同。默认值为 10000 。
|
- **prepare_rand**:生成的随机数据中唯一值的数量。若为 1 则表示所有数据都相同。默认值为 10000 。
|
||||||
|
|
||||||
- **pre_load_tb_meta** :是否提前加载子表的 meta 数据,取值为 "yes" or "no"。当子表数量非常多时,打开此选项可提高写入速度。
|
- **pre_load_tb_meta**:是否提前加载子表的 meta 数据,取值为 “yes” or "no"。当子表数量非常多时,打开此选项可提高写入速度。
|
||||||
|
|
||||||
### 查询配置参数
|
### 查询配置参数
|
||||||
|
|
||||||
|
@ -256,7 +256,7 @@ taosBenchmark -f <json file>
|
||||||
`query_times` 指定运行查询的次数,数值类型。
|
`query_times` 指定运行查询的次数,数值类型。
|
||||||
|
|
||||||
查询场景可以通过设置 `kill_slow_query_threshold` 和 `kill_slow_query_interval` 参数来控制杀掉慢查询语句的执行,threshold 控制如果 exec_usec 超过指定时间的查询将被 taosBenchmark 杀掉,单位为秒。
|
查询场景可以通过设置 `kill_slow_query_threshold` 和 `kill_slow_query_interval` 参数来控制杀掉慢查询语句的执行,threshold 控制如果 exec_usec 超过指定时间的查询将被 taosBenchmark 杀掉,单位为秒。
|
||||||
interval 控制休眠时间,避免持续查询慢查询消耗 CPU ,单位为秒。
|
interval 控制休眠时间,避免持续查询慢查询消耗 CPU,单位为秒。
|
||||||
|
|
||||||
其它通用参数详见 [通用配置参数](#通用配置参数)
|
其它通用参数详见 [通用配置参数](#通用配置参数)
|
||||||
|
|
||||||
|
@ -264,38 +264,38 @@ interval 控制休眠时间,避免持续查询慢查询消耗 CPU ,单位为
|
||||||
|
|
||||||
查询指定表(可以指定超级表、子表或普通表)的配置参数在 `specified_table_query` 中设置。
|
查询指定表(可以指定超级表、子表或普通表)的配置参数在 `specified_table_query` 中设置。
|
||||||
|
|
||||||
- **mixed_query** : 查询模式
|
- **mixed_query**:查询模式
|
||||||
"yes" :`混合查询`
|
“yes”:`混合查询`
|
||||||
"no"(默认值) :`普通查询`
|
"no"(默认值):`普通查询`
|
||||||
`普通查询`:`sqls` 中每个 sql 启动 `threads` 个线程查询此 sql, 执行完 `query_times` 次查询后退出,执行此 sql 的所有线程都完成后进入下一个 sql
|
`普通查询`:`sqls` 中每个 sql 启动 `threads` 个线程查询此 sql,执行完 `query_times` 次查询后退出,执行此 sql 的所有线程都完成后进入下一个 sql
|
||||||
`查询总次数` = `sqls` 个数 * `query_times` * `threads`
|
`查询总次数` = `sqls` 个数 * `query_times` * `threads`
|
||||||
|
|
||||||
`混合查询`:`sqls` 中所有 sql 分成 `threads` 个组,每个线程执行一组, 每个 sql 都需执行 `query_times` 次查询
|
`混合查询`:`sqls` 中所有 sql 分成 `threads` 个组,每个线程执行一组,每个 sql 都需执行 `query_times` 次查询
|
||||||
`查询总次数` = `sqls` 个数 * `query_times`
|
`查询总次数` = `sqls` 个数 * `query_times`
|
||||||
|
|
||||||
- **query_interval** : 查询时间间隔,单位: millisecond,默认值为 0。
|
- **query_interval**:查询时间间隔,单位:millisecond,默认值为 0。
|
||||||
|
|
||||||
- **threads** : 执行查询 SQL 的线程数,默认值为 1。
|
- **threads**:执行查询 SQL 的线程数,默认值为 1。
|
||||||
|
|
||||||
- **sqls**:
|
- **sqls**:
|
||||||
- **sql**: 执行的 SQL 命令,必填。
|
- **sql**:执行的 SQL 命令,必填。
|
||||||
- **result**: 保存查询结果的文件,未指定则不保存。
|
- **result**:保存查询结果的文件,未指定则不保存。
|
||||||
|
|
||||||
#### 查询超级表
|
#### 查询超级表
|
||||||
|
|
||||||
查询超级表的配置参数在 `super_table_query` 中设置。
|
查询超级表的配置参数在 `super_table_query` 中设置。
|
||||||
超级表查询的线程模式与上面介绍的指定查询语句查询的 `正常查询` 模式相同,不同之处是本 `sqls` 使用所有子表填充。
|
超级表查询的线程模式与上面介绍的指定查询语句查询的 `正常查询` 模式相同,不同之处是本 `sqls` 使用所有子表填充。
|
||||||
|
|
||||||
- **stblname** : 指定要查询的超级表的名称,必填。
|
- **stblname**:指定要查询的超级表的名称,必填。
|
||||||
|
|
||||||
- **query_interval** : 查询时间间隔,单位是秒,默认值为 0。
|
- **query_interval**:查询时间间隔,单位是秒,默认值为 0。
|
||||||
|
|
||||||
- **threads** : 执行查询 SQL 的线程数,默认值为 1。
|
- **threads**:执行查询 SQL 的线程数,默认值为 1。
|
||||||
|
|
||||||
- **sqls** :
|
- **sqls**:
|
||||||
- **sql** : 执行的 SQL 命令,必填;对于超级表的查询 SQL,在 SQL 命令中必须保留 "xxxx",会替换为超级下所有子表名后再执行。
|
- **sql**:执行的 SQL 命令,必填;对于超级表的查询 SQL,在 SQL 命令中必须保留 "xxxx",会替换为超级下所有子表名后再执行。
|
||||||
- **result** : 保存查询结果的文件,未指定则不保存。
|
- **result**:保存查询结果的文件,未指定则不保存。
|
||||||
- **限制项** : sqls 下配置 sql 数组最大为 100 个。
|
- **限制项**:sqls 下配置 sql 数组最大为 100 个。
|
||||||
|
|
||||||
### 订阅配置参数
|
### 订阅配置参数
|
||||||
|
|
||||||
|
@ -303,14 +303,14 @@ interval 控制休眠时间,避免持续查询慢查询消耗 CPU ,单位为
|
||||||
|
|
||||||
订阅配置参数在 `tmq_info` 项下设置,参数如下:
|
订阅配置参数在 `tmq_info` 项下设置,参数如下:
|
||||||
|
|
||||||
- **concurrent** : 消费订阅的消费者数量,或称并发消费数量,默认值:1。
|
- **concurrent**:消费订阅的消费者数量,或称并发消费数量,默认值:1。
|
||||||
- **create_mode** : 创建消费者模式,可取值 sequential:顺序创建, parallel:并发同时创建,必填项,无默认值。
|
- **create_mode**:创建消费者模式,可取值 sequential:顺序创建,parallel:并发同时创建,必填项,无默认值。
|
||||||
- **group_mode** : 生成消费者 groupId 模式,可取值 share:所有消费者只生成一个 groupId, independent:每个消费者生成一个独立的 groupId,如果 `group.id` 未设置,此项为必填项,无默认值。
|
- **group_mode**:生成消费者 groupId 模式,可取值 share:所有消费者只生成一个 groupId,independent:每个消费者生成一个独立的 groupId,如果 `group.id` 未设置,此项为必填项,无默认值。
|
||||||
- **poll_delay** : 调用 tmq_consumer_poll 传入的轮询超时时间,单位为毫秒,负数表示默认超时 1 秒。
|
- **poll_delay**:调用 tmq_consumer_poll 传入的轮询超时时间,单位为毫秒,负数表示默认超时 1 秒。
|
||||||
- **enable.manual.commit** : 是否允许手动提交,可取值 true:允许手动提交,每次消费完消息后手动调用 tmq_commit_sync 完成提交, false:不进行提交,默认值: false。
|
- **enable.manual.commit**:是否允许手动提交,可取值 true:允许手动提交,每次消费完消息后手动调用 tmq_commit_sync 完成提交,false:不进行提交,默认值:false。
|
||||||
- **rows_file** : 存储消费数据的文件,可以为全路径或相对路径,带文件名。实际保存的文件会在后面加上消费者序号,如 rows_file 为 result, 实际文件名为 result_1(消费者 1) result_2(消费者 2) ...
|
- **rows_file**:存储消费数据的文件,可以为全路径或相对路径,带文件名。实际保存的文件会在后面加上消费者序号,如 rows_file 为 result,实际文件名为 result_1(消费者 1) result_2(消费者 2) ...
|
||||||
- **expect_rows** : 期望每个消费者消费的行数,数据类型,当消费达到这个数,消费会退出,不设置会一直消费。
|
- **expect_rows**:期望每个消费者消费的行数,数据类型,当消费达到这个数,消费会退出,不设置会一直消费。
|
||||||
- **topic_list** : 指定消费的 topic 列表,数组类型。topic 列表格式示例: `{"name": "topic1", "sql": "select * from test.meters;"}` ,name:指定 topic 名,sql:指定创建 topic 的 sql 语句,需保证 sql 正确,框架会自动创建出 topic。
|
- **topic_list**:指定消费的 topic 列表,数组类型。topic 列表格式示例:`{"name": "topic1", "sql": "select * from test.meters;"}`,name:指定 topic 名,sql:指定创建 topic 的 sql 语句,需保证 sql 正确,框架会自动创建出 topic。
|
||||||
|
|
||||||
以下参数透传订阅属性,参见 [订阅创建参数](../../../develop/tmq/#创建参数) 说明:
|
以下参数透传订阅属性,参见 [订阅创建参数](../../../develop/tmq/#创建参数) 说明:
|
||||||
- **client.id**
|
- **client.id**
|
||||||
|
@ -319,7 +319,7 @@ interval 控制休眠时间,避免持续查询慢查询消耗 CPU ,单位为
|
||||||
- **enable.auto.commit**
|
- **enable.auto.commit**
|
||||||
- **msg.with.table.name**
|
- **msg.with.table.name**
|
||||||
- **auto.commit.interval.ms**
|
- **auto.commit.interval.ms**
|
||||||
- **group.id** : 若此值不指定,将由 `group_mode` 指定规则生成 groupId,若指定此值,`group_mode` 参数不再有效。
|
- **group.id**:若此值不指定,将由 `group_mode` 指定规则生成 groupId,若指定此值,`group_mode` 参数不再有效。
|
||||||
|
|
||||||
### 数据类型对照表
|
### 数据类型对照表
|
||||||
|
|
||||||
|
@ -395,28 +395,28 @@ SUCC: Spent 8.527298 (real 8.117379) seconds to insert rows: 10000000 with 8 thr
|
||||||
SUCC: insert delay, min: 19.6780ms, avg: 64.9390ms, p90: 94.6900ms, p95: 105.1870ms, p99: 130.6660ms, max: 157.0830ms
|
SUCC: insert delay, min: 19.6780ms, avg: 64.9390ms, p90: 94.6900ms, p95: 105.1870ms, p99: 130.6660ms, max: 157.0830ms
|
||||||
```
|
```
|
||||||
第一行写入速度统计:
|
第一行写入速度统计:
|
||||||
- Spent: 写入总耗时,单位秒,从开始写入第一个数据开始计时到最后一条数据结束,这里表示共花了 8.527298 秒。
|
- Spent:写入总耗时,单位秒,从开始写入第一个数据开始计时到最后一条数据结束,这里表示共花了 8.527298 秒。
|
||||||
- real : 写入总耗时(调用引擎),此耗时已抛去测试框架准备数据时间,纯统计在引擎调用上花费的时间,示例为 8.117379 秒,8.527298 - 8.117379 = 0.409919 秒则为测试框架准备数据消耗时间
|
- real:写入总耗时(调用引擎),此耗时已抛去测试框架准备数据时间,纯统计在引擎调用上花费的时间,示例为 8.117379 秒,8.527298 - 8.117379 = 0.409919 秒则为测试框架准备数据消耗时间
|
||||||
- rows : 写入总行数,为 1000 万条数据。
|
- rows:写入总行数,为 1000 万条数据。
|
||||||
- threads: 写入线程数,这里是 8 个线程同时写入。
|
- threads:写入线程数,这里是 8 个线程同时写入。
|
||||||
- records/second 写入速度 = `写入总耗时`/ `写入总行数` , 括号中 `real` 同前,表示纯引擎写入速度。
|
- records/second 写入速度 = `写入总耗时`/ `写入总行数`,括号中 `real` 同前,表示纯引擎写入速度。
|
||||||
第二行单个写入延时统计:
|
第二行单个写入延时统计:
|
||||||
- min : 写入最小延时。
|
- min:写入最小延时。
|
||||||
- avg : 写入平时延时。
|
- avg:写入平时延时。
|
||||||
- p90 : 写入延时 p90 百分位上的延时数。
|
- p90:写入延时 p90 百分位上的延时数。
|
||||||
- p95 : 写入延时 p95 百分位上的延时数。
|
- p95:写入延时 p95 百分位上的延时数。
|
||||||
- p99 : 写入延时 p99 百分位上的延时数。
|
- p99:写入延时 p99 百分位上的延时数。
|
||||||
- max : 写入最大延时。
|
- max:写入最大延时。
|
||||||
通过此系列指标,可观察到写入请求延时分布情况。
|
通过此系列指标,可观察到写入请求延时分布情况。
|
||||||
|
|
||||||
#### 查询指标
|
#### 查询指标
|
||||||
|
|
||||||
查询性能测试主要输出查询请求速度 QPS 指标, 输出格式如下:
|
查询性能测试主要输出查询请求速度 QPS 指标,输出格式如下:
|
||||||
``` bash
|
``` bash
|
||||||
complete query with 3 threads and 10000 query delay avg: 0.002686s min: 0.001182s max: 0.012189s p90: 0.002977s p95: 0.003493s p99: 0.004645s SQL command: select ...
|
complete query with 3 threads and 10000 query delay avg: 0.002686s min: 0.001182s max: 0.012189s p90: 0.002977s p95: 0.003493s p99: 0.004645s SQL command: select ...
|
||||||
INFO: Spend 26.9530 second completed total queries: 30000, the QPS of all threads: 1113.049
|
INFO: Spend 26.9530 second completed total queries: 30000, the QPS of all threads: 1113.049
|
||||||
```
|
```
|
||||||
- 第一行表示 3 个线程每个线程执行 10000 次查询及查询请求延时百分位分布情况,`SQL command` 为测试的查询语句。
|
- 第一行表示 3 个线程每个线程执行 10000 次查询及查询请求延时百分位分布情况,`SQL command` 为测试的查询语句。
|
||||||
- 第二行表示查询总耗时为 26.9653 秒,每秒查询率(QPS)为:1113.049 次/秒。
|
- 第二行表示查询总耗时为 26.9653 秒,每秒查询率(QPS)为:1113.049 次/秒。
|
||||||
- 如果在查询中设置了 `continue_if_fail` 选项为 `yes`,在最后一行中会输出失败请求个数及错误率,格式 error + 失败请求个数 (错误率)。
|
- 如果在查询中设置了 `continue_if_fail` 选项为 `yes`,在最后一行中会输出失败请求个数及错误率,格式 error + 失败请求个数 (错误率)。
|
||||||
- QPS = 成功请求数量 / 花费时间(单位秒)
|
- QPS = 成功请求数量 / 花费时间(单位秒)
|
||||||
|
@ -434,6 +434,6 @@ INFO: consumerId: 1, consume msgs: 1000, consume rows: 10000000
|
||||||
INFO: consumerId: 2, consume msgs: 1000, consume rows: 10000000
|
INFO: consumerId: 2, consume msgs: 1000, consume rows: 10000000
|
||||||
INFO: Consumed total msgs: 3000, total rows: 30000000
|
INFO: Consumed total msgs: 3000, total rows: 30000000
|
||||||
```
|
```
|
||||||
- 1 ~ 3 行实时输出每个消费者当前的消费速度,`msgs/s` 表示消费消息个数,每个消息中包含多行数据,`rows/s` 表示按行数统计的消费速度。
|
- 1 ~ 3 行实时输出每个消费者当前的消费速度,`msgs/s` 表示消费消息个数,每个消息中包含多行数据,`rows/s` 表示按行数统计的消费速度。
|
||||||
- 4 ~ 6 行是测试完成后每个消费者总体统计,统计共消费了多少条消息,共计多少行。
|
- 4 ~ 6 行是测试完成后每个消费者总体统计,统计共消费了多少条消息,共计多少行。
|
||||||
- 第 7 行所有消费者总体统计,`msgs` 表示共消费了多少条消息, `rows` 表示共消费了多少行数据。
|
- 第 7 行所有消费者总体统计,`msgs` 表示共消费了多少条消息,`rows` 表示共消费了多少行数据。
|
||||||
|
|
|
@ -12,7 +12,7 @@ description: 'TDengine 支持的数据类型: 时间戳、浮点型、JSON 类
|
||||||
- 内部函数 NOW 是客户端的当前时间
|
- 内部函数 NOW 是客户端的当前时间
|
||||||
- 插入记录时,如果时间戳为 NOW,插入数据时使用提交这条记录的客户端的当前时间
|
- 插入记录时,如果时间戳为 NOW,插入数据时使用提交这条记录的客户端的当前时间
|
||||||
- Epoch Time:时间戳也可以是一个长整数,表示从 UTC 时间 1970-01-01 00:00:00 开始的毫秒数。相应地,如果所在 Database 的时间精度设置为“微秒”,则长整型格式的时间戳含义也就对应于从 UTC 时间 1970-01-01 00:00:00 开始的微秒数;纳秒精度逻辑相同。
|
- Epoch Time:时间戳也可以是一个长整数,表示从 UTC 时间 1970-01-01 00:00:00 开始的毫秒数。相应地,如果所在 Database 的时间精度设置为“微秒”,则长整型格式的时间戳含义也就对应于从 UTC 时间 1970-01-01 00:00:00 开始的微秒数;纳秒精度逻辑相同。
|
||||||
- 时间可以加减,比如 NOW-2h,表明查询时刻向前推 2 个小时(最近 2 小时)。数字后面的时间单位可以是 b(纳秒)、u(微秒)、a(毫秒)、s(秒)、m(分)、h(小时)、d(天)、w(周)。 比如 `SELECT * FROM t1 WHERE ts > NOW-2w AND ts <= NOW-1w`,表示查询两周前整整一周的数据。在指定降采样操作(Down Sampling)的时间窗口(Interval)时,时间单位还可以使用 n(自然月)和 y(自然年)。
|
- 时间可以加减,比如 NOW-2h,表明查询时刻向前推 2 个小时(最近 2 小时)。数字后面的时间单位可以是 b(纳秒)、u(微秒)、a(毫秒)、s(秒)、m(分)、h(小时)、d(天)、w(周)。比如 `SELECT * FROM t1 WHERE ts > NOW-2w AND ts <= NOW-1w`,表示查询两周前整整一周的数据。在指定降采样操作(Down Sampling)的时间窗口(Interval)时,时间单位还可以使用 n(自然月)和 y(自然年)。
|
||||||
|
|
||||||
TDengine 缺省的时间戳精度是毫秒,但通过在 `CREATE DATABASE` 时传递的 `PRECISION` 参数也可以支持微秒和纳秒。
|
TDengine 缺省的时间戳精度是毫秒,但通过在 `CREATE DATABASE` 时传递的 `PRECISION` 参数也可以支持微秒和纳秒。
|
||||||
|
|
||||||
|
@ -24,24 +24,24 @@ CREATE DATABASE db_name PRECISION 'ns';
|
||||||
|
|
||||||
在 TDengine 中,普通表的数据模型中可使用以下数据类型。
|
在 TDengine 中,普通表的数据模型中可使用以下数据类型。
|
||||||
|
|
||||||
| # | **类型** | **Bytes** | **说明** |
|
| # | **类型** | **Bytes** | **说明** |
|
||||||
| --- | :---------------: | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
| --- | :---------------: | --------- | ---------------------- |
|
||||||
| 1 | TIMESTAMP | 8 | 时间戳。缺省精度毫秒,可支持微秒和纳秒,详细说明见上节。 |
|
| 1 | TIMESTAMP | 8 | 时间戳。缺省精度毫秒,可支持微秒和纳秒,详细说明见上节。|
|
||||||
| 2 | INT | 4 | 整型,范围 [-2^31, 2^31-1] |
|
| 2 | INT | 4 | 整型,范围 [-2^31, 2^31-1] |
|
||||||
| 3 | INT UNSIGNED | 4 | 无符号整数,[0, 2^32-1] |
|
| 3 | INT UNSIGNED | 4 | 无符号整数,[0, 2^32-1] |
|
||||||
| 4 | BIGINT | 8 | 长整型,范围 [-2^63, 2^63-1] |
|
| 4 | BIGINT | 8 | 长整型,范围 [-2^63, 2^63-1] |
|
||||||
| 5 | BIGINT UNSIGNED | 8 | 长整型,范围 [0, 2^64-1] |
|
| 5 | BIGINT UNSIGNED | 8 | 长整型,范围 [0, 2^64-1] |
|
||||||
| 6 | FLOAT | 4 | 浮点型,有效位数 6-7,范围 [-3.4E38, 3.4E38] |
|
| 6 | FLOAT | 4 | 浮点型,有效位数 6-7,范围 [-3.4E38, 3.4E38] |
|
||||||
| 7 | DOUBLE | 8 | 双精度浮点型,有效位数 15-16,范围 [-1.7E308, 1.7E308] |
|
| 7 | DOUBLE | 8 | 双精度浮点型,有效位数 15-16,范围 [-1.7E308, 1.7E308] |
|
||||||
| 8 | BINARY | 自定义 | 记录单字节字符串,建议只用于处理 ASCII 可见字符,中文等多字节字符需使用 NCHAR |
|
| 8 | BINARY | 自定义 | 记录单字节字符串,建议只用于处理 ASCII 可见字符,中文等多字节字符需使用 NCHAR|
|
||||||
| 9 | SMALLINT | 2 | 短整型, 范围 [-32768, 32767] |
|
| 9 | SMALLINT | 2 | 短整型, 范围 [-32768, 32767] |
|
||||||
| 10 | SMALLINT UNSIGNED | 2 | 无符号短整型,范围 [0, 65535] |
|
| 10 | SMALLINT UNSIGNED | 2 | 无符号短整型,范围 [0, 65535] |
|
||||||
| 11 | TINYINT | 1 | 单字节整型,范围 [-128, 127] |
|
| 11 | TINYINT | 1 | 单字节整型,范围 [-128, 127] |
|
||||||
| 12 | TINYINT UNSIGNED | 1 | 无符号单字节整型,范围 [0, 255] |
|
| 12 | TINYINT UNSIGNED | 1 | 无符号单字节整型,范围 [0, 255] |
|
||||||
| 13 | BOOL | 1 | 布尔型,{true, false} |
|
| 13 | BOOL | 1 | 布尔型,{true, false} |
|
||||||
| 14 | NCHAR | 自定义 | 记录包含多字节字符在内的字符串,如中文字符。每个 NCHAR 字符占用 4 字节的存储空间。字符串两端使用单引号引用,字符串内的单引号需用转义字符 `\'`。NCHAR 使用时须指定字符串大小,类型为 NCHAR(10) 的列表示此列的字符串最多存储 10 个 NCHAR 字符。如果用户字符串长度超出声明长度,将会报错。 |
|
| 14 | NCHAR | 自定义 | 记录包含多字节字符在内的字符串,如中文字符。每个 NCHAR 字符占用 4 字节的存储空间。字符串两端使用单引号引用,字符串内的单引号需用转义字符 `\'`。NCHAR 使用时须指定字符串大小,类型为 NCHAR(10) 的列表示此列的字符串最多存储 10 个 NCHAR 字符。如果用户字符串长度超出声明长度,将会报错。|
|
||||||
| 15 | JSON | | JSON 数据类型, 只有 Tag 可以是 JSON 格式 |
|
| 15 | JSON | | JSON 数据类型, 只有 Tag 可以是 JSON 格式 |
|
||||||
| 16 | VARCHAR | 自定义 | BINARY 类型的别名 |
|
| 16 | VARCHAR | 自定义 | BINARY 类型的别名 |
|
||||||
| 17 | GEOMETRY | 自定义 | 几何类型,3.1.0.0 版本开始支持
|
| 17 | GEOMETRY | 自定义 | 几何类型,3.1.0.0 版本开始支持
|
||||||
| 18 | VARBINARY | 自定义 | 可变长的二进制数据, 3.1.1.0 版本开始支持|
|
| 18 | VARBINARY | 自定义 | 可变长的二进制数据, 3.1.1.0 版本开始支持|
|
||||||
|
|
||||||
|
@ -52,14 +52,14 @@ CREATE DATABASE db_name PRECISION 'ns';
|
||||||
- BINARY 类型理论上最长可以有 16,374(从 3.0.5.0 版本开始,数据列为 65,517,标签列为 16,382) 字节。BINARY 仅支持字符串输入,字符串两端需使用单引号引用。使用时须指定大小,如 BINARY(20) 定义了最长为 20 个单字节字符的字符串,每个字符占 1 字节的存储空间,总共固定占用 20 字节的空间,此时如果用户字符串超出 20 字节将会报错。对于字符串内的单引号,可以用转义字符反斜线加单引号来表示,即 `\'`。
|
- BINARY 类型理论上最长可以有 16,374(从 3.0.5.0 版本开始,数据列为 65,517,标签列为 16,382) 字节。BINARY 仅支持字符串输入,字符串两端需使用单引号引用。使用时须指定大小,如 BINARY(20) 定义了最长为 20 个单字节字符的字符串,每个字符占 1 字节的存储空间,总共固定占用 20 字节的空间,此时如果用户字符串超出 20 字节将会报错。对于字符串内的单引号,可以用转义字符反斜线加单引号来表示,即 `\'`。
|
||||||
- GEOMETRY 类型数据列为最大长度为 65,517 字节,标签列最大长度为 16,382 字节。支持 2D 的 POINT、LINESTRING 和 POLYGON 子类型数据。长度计算方式如下表所示:
|
- GEOMETRY 类型数据列为最大长度为 65,517 字节,标签列最大长度为 16,382 字节。支持 2D 的 POINT、LINESTRING 和 POLYGON 子类型数据。长度计算方式如下表所示:
|
||||||
|
|
||||||
| # | **语法** | **最小长度** | **最大长度** | **每组坐标长度增长** |
|
| # | **语法** | **最小长度** | **最大长度** | **每组坐标长度增长** |
|
||||||
|---|--------------------------------------|----------|------------|--------------|
|
|---|--------------------------------------|----------|------------|--------------|
|
||||||
| 1 | POINT(1.0 1.0) | 21 | 21 | 无 |
|
| 1 | POINT(1.0 1.0) | 21 | 21 | 无 |
|
||||||
| 2 | LINESTRING(1.0 1.0, 2.0 2.0) | 9+2*16 | 9+4094*16 | +16 |
|
| 2 | LINESTRING(1.0 1.0, 2.0 2.0) | 9+2*16 | 9+4094*16 | +16 |
|
||||||
| 3 | POLYGON((1.0 1.0, 2.0 2.0, 1.0 1.0)) | 13+3*16 | 13+4094*16 | +16 |
|
| 3 | POLYGON((1.0 1.0, 2.0 2.0, 1.0 1.0)) | 13+3*16 | 13+4094*16 | +16 |
|
||||||
|
|
||||||
- SQL 语句中的数值类型将依据是否存在小数点,或使用科学计数法表示,来判断数值类型是否为整型或者浮点型,因此在使用时要注意相应类型越界的情况。例如,9999999999999999999 会认为超过长整型的上边界而溢出,而 9999999999999999999.0 会被认为是有效的浮点数。
|
- SQL 语句中的数值类型将依据是否存在小数点,或使用科学计数法表示,来判断数值类型是否为整型或者浮点型,因此在使用时要注意相应类型越界的情况。例如,9999999999999999999 会认为超过长整型的上边界而溢出,而 9999999999999999999.0 会被认为是有效的浮点数。
|
||||||
- VARBINARY 是一种存储二进制数据的数据类型,最大长度为 65,517 字节,标签列最大长度为 16,382 字节。可以通过sql或schemaless方式写入二进制数据(需要转换为\x开头的字符串写入),也可以通过stmt方式写入(可以直接使用二进制)。显示时通过16进制\x开头。
|
- VARBINARY 是一种存储二进制数据的数据类型,最大长度为 65,517 字节,标签列最大长度为 16,382 字节。可以通过sql或schemaless方式写入二进制数据(需要转换为 `\x` 开头的字符串写入),也可以通过 stmt 方式写入(可以直接使用二进制)。显示时通过16进制\x开头。
|
||||||
|
|
||||||
:::
|
:::
|
||||||
|
|
||||||
|
@ -67,16 +67,16 @@ CREATE DATABASE db_name PRECISION 'ns';
|
||||||
|
|
||||||
TDengine 支持多个类型的常量,细节如下表:
|
TDengine 支持多个类型的常量,细节如下表:
|
||||||
|
|
||||||
| # | **语法** | **类型** | **说明** |
|
| # | **语法** | **类型** | **说明** |
|
||||||
| --- | :-----------------------------------------------: | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
|
| --- | :-----------------------------------------------: | --------- | -------------------------------------------------------------------------------- |
|
||||||
| 1 | [\{+ \| -}]123 | BIGINT | 整型数值的字面量的类型均为 BIGINT。如果用户输入超过了 BIGINT 的表示范围,TDengine 按 BIGINT 对数值进行截断。 |
|
| 1 | [\{+ \| -}]123 | BIGINT | 整型数值的字面量的类型均为 BIGINT。如果用户输入超过了 BIGINT 的表示范围,TDengine 按 BIGINT 对数值进行截断。 |
|
||||||
| 2 | 123.45 | DOUBLE | 浮点数值的字面量的类型均为 DOUBLE。TDengine 依据是否存在小数点,或使用科学计数法表示,来判断数值类型是否为整型或者浮点型。 |
|
| 2 | 123.45 | DOUBLE | 浮点数值的字面量的类型均为 DOUBLE。TDengine 依据是否存在小数点,或使用科学计数法表示,来判断数值类型是否为整型或者浮点型。|
|
||||||
| 3 | 1.2E3 | DOUBLE | 科学计数法的字面量的类型为 DOUBLE。 |
|
| 3 | 1.2E3 | DOUBLE | 科学计数法的字面量的类型为 DOUBLE。|
|
||||||
| 4 | 'abc' | BINARY | 单引号括住的内容为字符串字面值,其类型为 BINARY,BINARY 的 Size 为实际的字符个数。对于字符串内的单引号,可以用转义字符反斜线加单引号来表示,即 `\'`。 |
|
| 4 | 'abc' | BINARY | 单引号括住的内容为字符串字面值,其类型为 BINARY,BINARY 的 Size 为实际的字符个数。对于字符串内的单引号,可以用转义字符反斜线加单引号来表示,即 `\'`。|
|
||||||
| 5 | "abc" | BINARY | 双引号括住的内容为字符串字面值,其类型为 BINARY,BINARY 的 Size 为实际的字符个数。对于字符串内的双引号,可以用转义字符反斜线加单引号来表示,即 `\"`。 |
|
| 5 | "abc" | BINARY | 双引号括住的内容为字符串字面值,其类型为 BINARY,BINARY 的 Size 为实际的字符个数。对于字符串内的双引号,可以用转义字符反斜线加单引号来表示,即 `\"`。|
|
||||||
| 6 | TIMESTAMP \{'literal' \| "literal"} | TIMESTAMP | TIMESTAMP 关键字表示后面的字符串字面量需要被解释为 TIMESTAMP 类型。字符串需要满足 YYYY-MM-DD HH:mm:ss.MS 格式,其时间分辨率为当前数据库的时间分辨率。 |
|
| 6 | TIMESTAMP \{'literal' \| "literal"} | TIMESTAMP | TIMESTAMP 关键字表示后面的字符串字面量需要被解释为 TIMESTAMP 类型。字符串需要满足 YYYY-MM-DD HH:mm:ss.MS 格式,其时间分辨率为当前数据库的时间分辨率。|
|
||||||
| 7 | \{TRUE \| FALSE} | BOOL | 布尔类型字面量。 |
|
| 7 | \{TRUE \| FALSE} | BOOL | 布尔类型字面量。 |
|
||||||
| 8 | \{'' \| "" \| '\t' \| "\t" \| ' ' \| " " \| NULL } | -- | 空值字面量。可以用于任意类型。 |
|
| 8 | \{'' \| "" \| '\t' \| "\t" \| ' ' \| " " \| NULL } | -- | 空值字面量。可以用于任意类型。|
|
||||||
|
|
||||||
:::note
|
:::note
|
||||||
|
|
||||||
|
|
|
@ -46,13 +46,13 @@ database_option: {
|
||||||
### 参数说明
|
### 参数说明
|
||||||
|
|
||||||
- VGROUPS:数据库中初始 vgroup 的数目。
|
- VGROUPS:数据库中初始 vgroup 的数目。
|
||||||
- PRECISION:数据库的时间戳精度。ms 表示毫秒,us 表示微秒,ns 表示纳秒,默认 ms 毫秒。
|
- PRECISION:数据库的时间戳精度。ms 表示毫秒、us 表示微秒、ns 表示纳秒、默认 ms 毫秒。
|
||||||
- REPLICA:表示数据库副本数,取值为 1、2 或 3,默认为 1; 2 仅在企业版 3.3.0.0 及以后版本中可用。在集群中使用,副本数必须小于或等于 DNODE 的数目。且使用时存在以下限制:
|
- REPLICA:表示数据库副本数,取值为 1、2 或 3,默认为 1; 2 仅在企业版 3.3.0.0 及以后版本中可用。在集群中使用,副本数必须小于或等于 DNODE 的数目。且使用时存在以下限制:
|
||||||
- 暂不支持对双副本数据库相关 Vgroup 进行 SPLITE VGROUP 或 REDISTRIBUTE VGROUP 操作
|
- 暂不支持对双副本数据库相关 Vgroup 进行 SPLITE VGROUP 或 REDISTRIBUTE VGROUP 操作
|
||||||
- 单副本数据库可变更为双副本数据库,但不支持从双副本变更为其它副本数,也不支持从三副本变更为双副本
|
- 单副本数据库可变更为双副本数据库,但不支持从双副本变更为其它副本数,也不支持从三副本变更为双副本
|
||||||
- BUFFER: 一个 VNODE 写入内存池大小,单位为 MB,默认为 256,最小为 3,最大为 16384。
|
- BUFFER:一个 vnode 写入内存池大小,单位为 MB,默认为 256,最小为 3,最大为 16384。
|
||||||
- PAGES:一个 VNODE 中元数据存储引擎的缓存页个数,默认为 256,最小 64。一个 VNODE 元数据存储占用 PAGESIZE \* PAGES,默认情况下为 1MB 内存。
|
- PAGES:一个 vnode 中元数据存储引擎的缓存页个数,默认为 256,最小 64。一个 vnode 元数据存储占用 PAGESIZE \* PAGES,默认情况下为 1MB 内存。
|
||||||
- PAGESIZE:一个 VNODE 中元数据存储引擎的页大小,单位为 KB,默认为 4 KB。范围为 1 到 16384,即 1 KB 到 16 MB。
|
- PAGESIZE:一个 vnode 中元数据存储引擎的页大小,单位为 KB,默认为 4 KB。范围为 1 到 16384,即 1 KB 到 16 MB。
|
||||||
- CACHEMODEL:表示是否在内存中缓存子表的最近数据。默认为 none。
|
- CACHEMODEL:表示是否在内存中缓存子表的最近数据。默认为 none。
|
||||||
- none:表示不缓存。
|
- none:表示不缓存。
|
||||||
- last_row:表示缓存子表最近一行数据。这将显著改善 LAST_ROW 函数的性能表现。
|
- last_row:表示缓存子表最近一行数据。这将显著改善 LAST_ROW 函数的性能表现。
|
||||||
|
@ -67,7 +67,7 @@ database_option: {
|
||||||
- DURATION:数据文件存储数据的时间跨度。可以使用加单位的表示形式,如 DURATION 100h、DURATION 10d 等,支持 m(分钟)、h(小时)和 d(天)三个单位。不加时间单位时默认单位为天,如 DURATION 50 表示 50 天。
|
- DURATION:数据文件存储数据的时间跨度。可以使用加单位的表示形式,如 DURATION 100h、DURATION 10d 等,支持 m(分钟)、h(小时)和 d(天)三个单位。不加时间单位时默认单位为天,如 DURATION 50 表示 50 天。
|
||||||
- MAXROWS:文件块中记录的最大条数,默认为 4096 条。
|
- MAXROWS:文件块中记录的最大条数,默认为 4096 条。
|
||||||
- MINROWS:文件块中记录的最小条数,默认为 100 条。
|
- MINROWS:文件块中记录的最小条数,默认为 100 条。
|
||||||
- KEEP:表示数据文件保存的天数,缺省值为 3650,取值范围 [1, 365000],且必须大于或等于 3 倍的 DURATION 参数值。数据库会自动删除保存时间超过 KEEP 值的数据从而释放存储空间。KEEP 可以使用加单位的表示形式,如 KEEP 100h、KEEP 10d 等,支持 m(分钟)、h(小时)和 d(天)三个单位。也可以不写单位,如 KEEP 50,此时默认单位为天。企业版支持[多级存储](../../operation/planning/#%E5%A4%9A%E7%BA%A7%E5%AD%98%E5%82%A8)功能, 因此, 可以设置多个保存时间(多个以英文逗号分隔,最多 3 个,满足 keep 0 \<= keep 1 \<= keep 2,如 KEEP 100h,100d,3650d); 社区版不支持多级存储功能(即使配置了多个保存时间, 也不会生效, KEEP 会取最大的保存时间)。了解更多,请点击 [关于主键时间戳](https://docs.taosdata.com/reference/taos-sql/insert/)
|
- KEEP:表示数据文件保存的天数,缺省值为 3650,取值范围 [1, 365000],且必须大于或等于 3 倍的 DURATION 参数值。数据库会自动删除保存时间超过 KEEP 值的数据从而释放存储空间。KEEP 可以使用加单位的表示形式,如 KEEP 100h、KEEP 10d 等,支持 m(分钟)、h(小时)和 d(天)三个单位。也可以不写单位,如 KEEP 50,此时默认单位为天。企业版支持[多级存储](https://docs.taosdata.com/operation/planning/#%E5%A4%9A%E7%BA%A7%E5%AD%98%E5%82%A8)功能, 因此, 可以设置多个保存时间(多个以英文逗号分隔,最多 3 个,满足 keep 0 \<= keep 1 \<= keep 2,如 KEEP 100h,100d,3650d); 社区版不支持多级存储功能(即使配置了多个保存时间, 也不会生效, KEEP 会取最大的保存时间)。了解更多,请点击 [关于主键时间戳](https://docs.taosdata.com/reference/taos-sql/insert/)
|
||||||
|
|
||||||
- KEEP_TIME_OFFSET:自 3.2.0.0 版本生效。删除或迁移保存时间超过 KEEP 值的数据的延迟执行时间,默认值为 0 (小时)。在数据文件保存时间超过 KEEP 后,删除或迁移操作不会立即执行,而会额外等待本参数指定的时间间隔,以实现与业务高峰期错开的目的。
|
- KEEP_TIME_OFFSET:自 3.2.0.0 版本生效。删除或迁移保存时间超过 KEEP 值的数据的延迟执行时间,默认值为 0 (小时)。在数据文件保存时间超过 KEEP 后,删除或迁移操作不会立即执行,而会额外等待本参数指定的时间间隔,以实现与业务高峰期错开的目的。
|
||||||
- STT_TRIGGER:表示落盘文件触发文件合并的个数。对于少表高频写入场景,此参数建议使用默认配置;而对于多表低频写入场景,此参数建议配置较大的值。
|
- STT_TRIGGER:表示落盘文件触发文件合并的个数。对于少表高频写入场景,此参数建议使用默认配置;而对于多表低频写入场景,此参数建议配置较大的值。
|
||||||
|
@ -76,17 +76,17 @@ database_option: {
|
||||||
- 1:表示只可以创建一张超级表。
|
- 1:表示只可以创建一张超级表。
|
||||||
- TABLE_PREFIX:当其为正值时,在决定把一个表分配到哪个 vgroup 时要忽略表名中指定长度的前缀;当其为负值时,在决定把一个表分配到哪个 vgroup 时只使用表名中指定长度的前缀;例如,假定表名为 "v30001",当 TSDB_PREFIX = 2 时 使用 "0001" 来决定分配到哪个 vgroup ,当 TSDB_PREFIX = -2 时使用 "v3" 来决定分配到哪个 vgroup
|
- TABLE_PREFIX:当其为正值时,在决定把一个表分配到哪个 vgroup 时要忽略表名中指定长度的前缀;当其为负值时,在决定把一个表分配到哪个 vgroup 时只使用表名中指定长度的前缀;例如,假定表名为 "v30001",当 TSDB_PREFIX = 2 时 使用 "0001" 来决定分配到哪个 vgroup ,当 TSDB_PREFIX = -2 时使用 "v3" 来决定分配到哪个 vgroup
|
||||||
- TABLE_SUFFIX:当其为正值时,在决定把一个表分配到哪个 vgroup 时要忽略表名中指定长度的后缀;当其为负值时,在决定把一个表分配到哪个 vgroup 时只使用表名中指定长度的后缀;例如,假定表名为 "v30001",当 TSDB_SUFFIX = 2 时 使用 "v300" 来决定分配到哪个 vgroup ,当 TSDB_SUFFIX = -2 时使用 "01" 来决定分配到哪个 vgroup。
|
- TABLE_SUFFIX:当其为正值时,在决定把一个表分配到哪个 vgroup 时要忽略表名中指定长度的后缀;当其为负值时,在决定把一个表分配到哪个 vgroup 时只使用表名中指定长度的后缀;例如,假定表名为 "v30001",当 TSDB_SUFFIX = 2 时 使用 "v300" 来决定分配到哪个 vgroup ,当 TSDB_SUFFIX = -2 时使用 "01" 来决定分配到哪个 vgroup。
|
||||||
- TSDB_PAGESIZE:一个 VNODE 中时序数据存储引擎的页大小,单位为 KB,默认为 4 KB。范围为 1 到 16384,即 1 KB到 16 MB。
|
- TSDB_PAGESIZE:一个 vnode 中时序数据存储引擎的页大小,单位为 KB,默认为 4 KB。范围为 1 到 16384,即 1 KB到 16 MB。
|
||||||
- DNODES:指定 VNODE 所在的 DNODE 列表,如 '1,2,3',以逗号区分且字符间不能有空格,仅企业版支持。
|
- DNODES:指定 vnode 所在的 DNODE 列表,如 '1,2,3',以逗号区分且字符间不能有空格,仅企业版支持。
|
||||||
- WAL_LEVEL:WAL 级别,默认为 1。
|
- WAL_LEVEL:WAL 级别,默认为 1。
|
||||||
- 1:写 WAL,但不执行 fsync。
|
- 1:写 WAL,但不执行 fsync。
|
||||||
- 2:写 WAL,而且执行 fsync。
|
- 2:写 WAL,而且执行 fsync。
|
||||||
- WAL_FSYNC_PERIOD:当 WAL_LEVEL 参数设置为 2 时,用于设置落盘的周期。默认为 3000,单位毫秒。最小为 0,表示每次写入立即落盘;最大为 180000,即三分钟。
|
- WAL_FSYNC_PERIOD:当 WAL_LEVEL 参数设置为 2 时,用于设置落盘的周期。默认为 3000,单位毫秒。最小为 0,表示每次写入立即落盘;最大为 180000,即三分钟。
|
||||||
- WAL_RETENTION_PERIOD: 为了数据订阅消费,需要 WAL 日志文件额外保留的最大时长策略。WAL 日志清理,不受订阅客户端消费状态影响。单位为 s。默认为 3600,表示在 WAL 保留最近 3600 秒的数据,请根据数据订阅的需要修改这个参数为适当值。
|
- WAL_RETENTION_PERIOD:为了数据订阅消费,需要 WAL 日志文件额外保留的最大时长策略。WAL 日志清理,不受订阅客户端消费状态影响。单位为 s。默认为 3600,表示在 WAL 保留最近 3600 秒的数据,请根据数据订阅的需要修改这个参数为适当值。
|
||||||
- WAL_RETENTION_SIZE:为了数据订阅消费,需要 WAL 日志文件额外保留的最大累计大小策略。单位为 KB。默认为 0,表示累计大小无上限。
|
- WAL_RETENTION_SIZE:为了数据订阅消费,需要 WAL 日志文件额外保留的最大累计大小策略。单位为 KB。默认为 0,表示累计大小无上限。
|
||||||
- COMPACT_INTERVAL:自动 compact 触发周期(从 1970-01-01T00:00:00Z 开始切分的时间周期)。取值范围:0 或 [10m, keep2],单位:m(分钟),h(小时),d(天)。不加时间单位默认单位为天,默认值为 0,即不触发自动 compact 功能。如果 db 中有未完成的 compact 任务,不重复下发 compact 任务。仅企业版 3.3.5.0 版本开始支持。
|
- COMPACT_INTERVAL:自动 compact 触发周期(从 1970-01-01T00:00:00Z 开始切分的时间周期)。取值范围:0 或 [10m, keep2],单位:m(分钟),h(小时),d(天)。不加时间单位默认单位为天,默认值为 0,即不触发自动 compact 功能。如果 db 中有未完成的 compact 任务,不重复下发 compact 任务。仅企业版 3.3.5.0 版本开始支持。
|
||||||
- COMPACT_TIME_RANGE:自动 compact 任务触发的 compact 时间范围,取值范围:[-keep2, -duration],单位:m(分钟),h(小时),d(天)。不加时间单位时默认单位为天,默认值为 [0, 0]。取默认值 [0, 0] 时,如果 COMPACT_INTERVAL 大于 0,会按照 [-keep2, -duration] 下发自动 compact。因此,要关闭自动 compact 功能,需要将 COMPACT_INTERVAL 设置为 0。仅企业版 3.3.5.0 版本开始支持。
|
- COMPACT_TIME_RANGE:自动 compact 任务触发的 compact 时间范围,取值范围:[-keep2, -duration],单位:m(分钟),h(小时),d(天)。不加时间单位时默认单位为天,默认值为 [0, 0]。取默认值 [0, 0] 时,如果 COMPACT_INTERVAL 大于 0,会按照 [-keep2, -duration] 下发自动 compact。因此,要关闭自动 compact 功能,需要将 COMPACT_INTERVAL 设置为 0。仅企业版 3.3.5.0 版本开始支持。
|
||||||
- COMPACT_TIME_OFFSET:自动 compact 任务触发的 compact 时间相对本地时间的偏移量。取值范围:[0,23],单位: h(小时),默认值为 0。以 UTC 0 时区为例,如果 COMPACT_INTERVAL 为 1d,当 COMPACT_TIME_OFFSET 为 0 时,在每天 0 点下发自动 compact,如果 COMPACT_TIME_OFFSET 为 2,在每天 2 点下发自动 compact。仅企业版 3.3.5.0 版本开始支持。
|
- COMPACT_TIME_OFFSET:自动 compact 任务触发的 compact 时间相对本地时间的偏移量。取值范围:[0, 23],单位:h(小时),默认值为 0。以 UTC 0 时区为例,如果 COMPACT_INTERVAL 为 1d,当 COMPACT_TIME_OFFSET 为 0 时,在每天 0 点下发自动 compact,如果 COMPACT_TIME_OFFSET 为 2,在每天 2 点下发自动 compact。仅企业版 3.3.5.0 版本开始支持。
|
||||||
-
|
-
|
||||||
|
|
||||||
### 创建数据库示例
|
### 创建数据库示例
|
||||||
|
|
|
@ -41,7 +41,7 @@ table_option: {
|
||||||
|
|
||||||
**使用说明**
|
**使用说明**
|
||||||
|
|
||||||
1. 表(列)名命名规则参见[名称命名规则](./19-limit.md#名称命名规则)。
|
1. 表(列)名命名规则参见 [名称命名规则](./19-limit.md#名称命名规则)。
|
||||||
2. 表名最大长度为 192。
|
2. 表名最大长度为 192。
|
||||||
3. 表的第一个字段必须是 TIMESTAMP,并且系统自动将其设为主键。
|
3. 表的第一个字段必须是 TIMESTAMP,并且系统自动将其设为主键。
|
||||||
4. 除时间戳主键列之外,还可以通过 PRIMARY KEY 关键字指定第二列为额外的主键列,该列与时间戳列共同组成复合主键。当设置了复合主键时,两条记录的时间戳列与 PRIMARY KEY 列都相同,才会被认为是重复记录,数据库只保留最新的一条;否则视为两条记录,全部保留。注意:被指定为主键列的第二列必须为整型或字符串类型(VARCHAR)。
|
4. 除时间戳主键列之外,还可以通过 PRIMARY KEY 关键字指定第二列为额外的主键列,该列与时间戳列共同组成复合主键。当设置了复合主键时,两条记录的时间戳列与 PRIMARY KEY 列都相同,才会被认为是重复记录,数据库只保留最新的一条;否则视为两条记录,全部保留。注意:被指定为主键列的第二列必须为整型或字符串类型(VARCHAR)。
|
||||||
|
|
|
@ -99,11 +99,11 @@ Hints 是用户控制单个语句查询优化的一种手段,当 Hint 不适
|
||||||
| :-----------: | -------------- | -------------------------- | -----------------------------|
|
| :-----------: | -------------- | -------------------------- | -----------------------------|
|
||||||
| BATCH_SCAN | 无 | 采用批量读表的方式 | 超级表 JOIN 语句 |
|
| BATCH_SCAN | 无 | 采用批量读表的方式 | 超级表 JOIN 语句 |
|
||||||
| NO_BATCH_SCAN | 无 | 采用顺序读表的方式 | 超级表 JOIN 语句 |
|
| NO_BATCH_SCAN | 无 | 采用顺序读表的方式 | 超级表 JOIN 语句 |
|
||||||
| SORT_FOR_GROUP| 无 | 采用sort方式进行分组, 与PARTITION_FIRST冲突 | partition by 列表有普通列时 |
|
| SORT_FOR_GROUP| 无 | 采用 sort 方式进行分组,与 PARTITION_FIRST 冲突 | partition by 列表有普通列时 |
|
||||||
| PARTITION_FIRST| 无 | 在聚合之前使用PARTITION计算分组, 与SORT_FOR_GROUP冲突 | partition by 列表有普通列时 |
|
| PARTITION_FIRST| 无 | 在聚合之前使用 PARTITION 计算分组,与 SORT_FOR_GROUP 冲突 | partition by 列表有普通列时 |
|
||||||
| PARA_TABLES_SORT| 无 | 超级表的数据按时间戳排序时, 不使用临时磁盘空间, 只使用内存。当子表数量多, 行长比较大时候, 会使用大量内存, 可能发生OOM | 超级表的数据按时间戳排序时 |
|
| PARA_TABLES_SORT| 无 | 超级表的数据按时间戳排序时,不使用临时磁盘空间,只使用内存。当子表数量多,行长比较大时候,会使用大量内存,可能发生 OOM | 超级表的数据按时间戳排序时 |
|
||||||
| SMALLDATA_TS_SORT| 无 | 超级表的数据按时间戳排序时, 查询列长度大于等于256, 但是行数不多, 使用这个提示, 可以提高性能 | 超级表的数据按时间戳排序时 |
|
| SMALLDATA_TS_SORT| 无 | 超级表的数据按时间戳排序时,查询列长度大于等于 256,但是行数不多,使用这个提示,可以提高性能 | 超级表的数据按时间戳排序时 |
|
||||||
| SKIP_TSMA | 无 | 用于显示的禁用TSMA查询优化 | 带Agg函数的查询语句 |
|
| SKIP_TSMA | 无 | 用于显示的禁用 TSMA 查询优化 | 带 Agg 函数的查询语句 |
|
||||||
|
|
||||||
举例:
|
举例:
|
||||||
|
|
||||||
|
@ -321,13 +321,13 @@ NULLS 语法用来指定 NULL 值在排序中输出的位置。NULLS LAST 是升
|
||||||
|
|
||||||
## LIMIT
|
## LIMIT
|
||||||
|
|
||||||
LIMIT 控制输出条数,OFFSET 指定从第几条之后开始输出。LIMIT/OFFSET 对结果集的执行顺序在 ORDER BY 之后。LIMIT 5 OFFSET 2 可以简写为 LIMIT 2, 5,都输出第 3 行到第 7 行数据。
|
LIMIT 控制输出条数,OFFSET 指定从第几条之后开始输出。LIMIT/OFFSET 对结果集的执行顺序在 ORDER BY 之后。`LIMIT 5 OFFSET 2` 可以简写为 `LIMIT 2, 5`,都输出第 3 行到第 7 行数据。
|
||||||
|
|
||||||
在有 PARTITION BY/GROUP BY 子句时,LIMIT 控制的是每个切分的分片中的输出,而不是总的结果集输出。
|
在有 PARTITION BY/GROUP BY 子句时,LIMIT 控制的是每个切分的分片中的输出,而不是总的结果集输出。
|
||||||
|
|
||||||
## SLIMIT
|
## SLIMIT
|
||||||
|
|
||||||
SLIMIT 和 PARTITION BY/GROUP BY 子句一起使用,用来控制输出的分片的数量。SLIMIT 5 SOFFSET 2 可以简写为 SLIMIT 2, 5,都表示输出第 3 个到第 7 个分片。
|
SLIMIT 和 PARTITION BY/GROUP BY 子句一起使用,用来控制输出的分片的数量。`SLIMIT 5 SOFFSET 2` 可以简写为 SLIMIT `2, 5`,都表示输出第 3 个到第 7 个分片。
|
||||||
|
|
||||||
需要注意,如果有 ORDER BY 子句,则输出只有一个分片。
|
需要注意,如果有 ORDER BY 子句,则输出只有一个分片。
|
||||||
|
|
||||||
|
@ -484,8 +484,8 @@ SELECT ... FROM (SELECT ... FROM ...) ...;
|
||||||
- 内层查询的 ORDER BY 子句一般没有意义,建议避免这样的写法以免无谓的资源消耗。
|
- 内层查询的 ORDER BY 子句一般没有意义,建议避免这样的写法以免无谓的资源消耗。
|
||||||
- 与非嵌套的查询语句相比,外层查询所能支持的功能特性存在如下限制:
|
- 与非嵌套的查询语句相比,外层查询所能支持的功能特性存在如下限制:
|
||||||
- 计算函数部分:
|
- 计算函数部分:
|
||||||
- 如果内层查询的结果数据未提供时间戳,那么计算过程隐式依赖时间戳的函数在外层会无法正常工作。例如:INTERP, DERIVATIVE, IRATE, LAST_ROW, FIRST, LAST, TWA, STATEDURATION, TAIL, UNIQUE。
|
- 如果内层查询的结果数据未提供时间戳,那么计算过程隐式依赖时间戳的函数在外层会无法正常工作。例如:INTERP、DERIVATIVE、IRATE、LAST_ROW、FIRST、LAST、TWA、STATEDURATION、TAIL、UNIQUE。
|
||||||
- 如果内层查询的结果数据不是按时间戳有序,那么计算过程依赖数据按时间有序的函数在外层会无法正常工作。例如:LEASTSQUARES, ELAPSED, INTERP, DERIVATIVE, IRATE, TWA, DIFF, STATECOUNT, STATEDURATION, CSUM, MAVG, TAIL, UNIQUE。
|
- 如果内层查询的结果数据不是按时间戳有序,那么计算过程依赖数据按时间有序的函数在外层会无法正常工作。例如:LEASTSQUARES、ELAPSED、INTERP、DERIVATIVE、IRATE、TWA、DIFF、STATECOUNT、STATEDURATION、CSUM、MAVG、TAIL、UNIQUE。
|
||||||
- 计算过程需要两遍扫描的函数,在外层查询中无法正常工作。例如:此类函数包括:PERCENTILE。
|
- 计算过程需要两遍扫描的函数,在外层查询中无法正常工作。例如:此类函数包括:PERCENTILE。
|
||||||
|
|
||||||
:::
|
:::
|
||||||
|
@ -520,7 +520,7 @@ SELECT * FROM tb1 WHERE ts >= NOW - 1h;
|
||||||
SELECT * FROM tb1 WHERE ts > '2018-06-01 08:00:00.000' AND ts <= '2018-06-02 08:00:00.000' AND col3 LIKE '%nny' ORDER BY ts DESC;
|
SELECT * FROM tb1 WHERE ts > '2018-06-01 08:00:00.000' AND ts <= '2018-06-02 08:00:00.000' AND col3 LIKE '%nny' ORDER BY ts DESC;
|
||||||
```
|
```
|
||||||
|
|
||||||
查询 col1 与 col2 的和,并取名 complex, 时间大于 2018-06-01 08:00:00.000, col2 大于 1.2,结果输出仅仅 10 条记录,从第 5 条开始:
|
查询 col1 与 col2 的和,并取名 complex,时间大于 2018-06-01 08:00:00.000,col2 大于 1.2,结果输出仅仅 10 条记录,从第 5 条开始:
|
||||||
|
|
||||||
```
|
```
|
||||||
SELECT (col1 + col2) AS 'complex' FROM tb1 WHERE ts > '2018-06-01 08:00:00.000' AND col2 > 1.2 LIMIT 10 OFFSET 5;
|
SELECT (col1 + col2) AS 'complex' FROM tb1 WHERE ts > '2018-06-01 08:00:00.000' AND col2 > 1.2 LIMIT 10 OFFSET 5;
|
||||||
|
|
|
@ -41,7 +41,7 @@ SHOW INDEXES FROM [db_name.]tbl_name;
|
||||||
|
|
||||||
## 使用说明
|
## 使用说明
|
||||||
|
|
||||||
1. 索引使用得当能够提升数据过滤的效率,目前支持的过滤算子有 `=`, `>`, `>=`, `<`, `<=`。如果查询过滤条件中使用了这些算子,则索引能够明显提升查询效率。但如果查询过滤条件中使用的是其它算子,则索引起不到作用,查询效率没有变化。未来会逐步添加更多的算子。
|
1. 索引使用得当能够提升数据过滤的效率,目前支持的过滤算子有 `=`、`>`、`>=`、`<`、`<=`。如果查询过滤条件中使用了这些算子,则索引能够明显提升查询效率。但如果查询过滤条件中使用的是其它算子,则索引起不到作用,查询效率没有变化。未来会逐步添加更多的算子。
|
||||||
|
|
||||||
2. 针对一个 tag 列只能建立一个索引,如果重复创建索引则会报错。
|
2. 针对一个 tag 列只能建立一个索引,如果重复创建索引则会报错。
|
||||||
|
|
||||||
|
@ -55,4 +55,4 @@ SHOW INDEXES FROM [db_name.]tbl_name;
|
||||||
|
|
||||||
7. 如果某个 tag 列的唯一值较少时,不建议对其建立索引,这种情况下收效甚微。
|
7. 如果某个 tag 列的唯一值较少时,不建议对其建立索引,这种情况下收效甚微。
|
||||||
|
|
||||||
8. 新建立的超级表,会给第一列tag,随机生成一个indexNewName, 生成规则是:tag0的name + 23个byte, 在系统表可以查,也可以按需要drop,行为和其他列tag 的索引一样
|
8. 新建立的超级表,会给第一列 tag,随机生成一个indexNewName,生成规则是:tag0的name + 23个byte,在系统表可以查,也可以按需要drop,行为和其他列 tag 的索引一样
|
||||||
|
|
|
@ -14,19 +14,19 @@ title: "删除数据"
|
||||||
DELETE FROM [ db_name. ] tb_name [WHERE condition];
|
DELETE FROM [ db_name. ] tb_name [WHERE condition];
|
||||||
```
|
```
|
||||||
|
|
||||||
**功能:** 删除指定表或超级表中的数据记录
|
**功能**:删除指定表或超级表中的数据记录
|
||||||
|
|
||||||
**参数:**
|
**参数**:
|
||||||
|
|
||||||
- `db_name` : 可选参数,指定要删除表所在的数据库名,不填写则在当前数据库中
|
- `db_name` :可选参数,指定要删除表所在的数据库名,不填写则在当前数据库中
|
||||||
- `tb_name` : 必填参数,指定要删除数据的表名,可以是普通表、子表,也可以是超级表。
|
- `tb_name` :必填参数,指定要删除数据的表名,可以是普通表、子表,也可以是超级表。
|
||||||
- `condition`: 可选参数,指定删除数据的过滤条件,不指定过滤条件则为表中所有数据,请慎重使用。特别说明,这里的 where 条件中只支持对第一列时间列的过滤。
|
- `condition`:可选参数,指定删除数据的过滤条件,不指定过滤条件则为表中所有数据,请慎重使用。特别说明,这里的 where 条件中只支持对第一列时间列的过滤。
|
||||||
|
|
||||||
**特别说明:**
|
**特别说明**:
|
||||||
|
|
||||||
数据删除后不可恢复,请慎重使用。为了确保删除的数据确实是自己要删除的,建议可以先使用 `select` 语句加 `where` 后的删除条件查看要删除的数据内容,确认无误后再执行 `delete` 命令。
|
数据删除后不可恢复,请慎重使用。为了确保删除的数据确实是自己要删除的,建议可以先使用 `select` 语句加 `where` 后的删除条件查看要删除的数据内容,确认无误后再执行 `delete` 命令。
|
||||||
|
|
||||||
**示例:**
|
**示例**:
|
||||||
|
|
||||||
`meters` 是一个超级表,`groupid` 是 int 类型的 tag 列,现在要删除 `meters` 表中时间小于 2021-10-01 10:40:00.100 的所有数据,sql 如下:
|
`meters` 是一个超级表,`groupid` 是 int 类型的 tag 列,现在要删除 `meters` 表中时间小于 2021-10-01 10:40:00.100 的所有数据,sql 如下:
|
||||||
|
|
||||||
|
|
|
@ -193,7 +193,7 @@ ROUND(expr[, digits])
|
||||||
- `digits` 小于零表示丢掉小数位,并将数字四舍五入到小数点左侧 `digits` 位。若小数点左侧的位数小于 `digits`位,返回 0。
|
- `digits` 小于零表示丢掉小数位,并将数字四舍五入到小数点左侧 `digits` 位。若小数点左侧的位数小于 `digits`位,返回 0。
|
||||||
- 由于暂未支持 DECIMAL 类型,所以该函数会用 DOUBLE 和 FLOAT 来表示包含小数的结果,但是 DOUBLE 和 FLOAT 是有精度上限的,当位数太多时使用该函数可能没有意义。
|
- 由于暂未支持 DECIMAL 类型,所以该函数会用 DOUBLE 和 FLOAT 来表示包含小数的结果,但是 DOUBLE 和 FLOAT 是有精度上限的,当位数太多时使用该函数可能没有意义。
|
||||||
- 只能与普通列,选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。
|
- 只能与普通列,选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。
|
||||||
- `digits` 从 3.3.3.0 版本开始支持。
|
- `digits` 从 v3.3.3.0 开始支持。
|
||||||
|
|
||||||
**举例**:
|
**举例**:
|
||||||
```sql
|
```sql
|
||||||
|
@ -269,7 +269,7 @@ PI()
|
||||||
|
|
||||||
**功能说明**:返回圆周率 π 的值。
|
**功能说明**:返回圆周率 π 的值。
|
||||||
|
|
||||||
**使用说明**:ver-3.3.3.0
|
**版本**:v3.3.3.0
|
||||||
|
|
||||||
**返回结果类型**:DOUBLE。
|
**返回结果类型**:DOUBLE。
|
||||||
|
|
||||||
|
@ -298,7 +298,7 @@ TRUNCATE(expr, digits)
|
||||||
|
|
||||||
**功能说明**:获得指定字段按照指定位数截断的值。
|
**功能说明**:获得指定字段按照指定位数截断的值。
|
||||||
|
|
||||||
**使用说明**:ver-3.3.3.0
|
**版本**:v3.3.3.0
|
||||||
|
|
||||||
**返回结果类型**:与 `expr` 字段的原始数据类型一致。
|
**返回结果类型**:与 `expr` 字段的原始数据类型一致。
|
||||||
|
|
||||||
|
@ -338,7 +338,7 @@ EXP(expr)
|
||||||
```
|
```
|
||||||
**功能说明**:返回 e(自然对数的底)的指定乘方后的值。
|
**功能说明**:返回 e(自然对数的底)的指定乘方后的值。
|
||||||
|
|
||||||
**使用说明**:ver-3.3.3.0
|
**版本**:v3.3.3.0
|
||||||
|
|
||||||
**返回结果类型**:DOUBLE。
|
**返回结果类型**:DOUBLE。
|
||||||
|
|
||||||
|
@ -367,7 +367,7 @@ LN(expr)
|
||||||
|
|
||||||
**功能说明**:返回指定参数的自然对数。
|
**功能说明**:返回指定参数的自然对数。
|
||||||
|
|
||||||
**使用说明**:ver-3.3.3.0
|
**版本**:v3.3.3.0
|
||||||
|
|
||||||
**返回结果类型**:DOUBLE。
|
**返回结果类型**:DOUBLE。
|
||||||
|
|
||||||
|
@ -397,7 +397,7 @@ MOD(expr1, expr2)
|
||||||
|
|
||||||
**功能说明**:计算 expr1 % expr2 的结果。
|
**功能说明**:计算 expr1 % expr2 的结果。
|
||||||
|
|
||||||
**使用说明**:ver-3.3.3.0
|
**版本**:v3.3.3.0
|
||||||
|
|
||||||
**返回结果类型**:DOUBLE。
|
**返回结果类型**:DOUBLE。
|
||||||
|
|
||||||
|
@ -432,7 +432,7 @@ RAND([seed])
|
||||||
|
|
||||||
**功能说明**:返回一个从0到1均匀分布的随机数。
|
**功能说明**:返回一个从0到1均匀分布的随机数。
|
||||||
|
|
||||||
**使用说明**:ver-3.3.3.0
|
**版本**:v3.3.3.0
|
||||||
|
|
||||||
**返回结果类型**:DOUBLE。
|
**返回结果类型**:DOUBLE。
|
||||||
|
|
||||||
|
@ -477,7 +477,7 @@ SIGN(expr)
|
||||||
|
|
||||||
**功能说明**:返回指定参数的符号。
|
**功能说明**:返回指定参数的符号。
|
||||||
|
|
||||||
**使用说明**:ver-3.3.3.0
|
**版本**:v3.3.3.0
|
||||||
|
|
||||||
**返回结果类型**:与指定字段的原始数据类型一致。
|
**返回结果类型**:与指定字段的原始数据类型一致。
|
||||||
|
|
||||||
|
@ -490,8 +490,8 @@ SIGN(expr)
|
||||||
**使用说明**:
|
**使用说明**:
|
||||||
- 如果 `expr` 为负,返回 -1。
|
- 如果 `expr` 为负,返回 -1。
|
||||||
- 如果 `expr` 为正,返回 1。
|
- 如果 `expr` 为正,返回 1。
|
||||||
- 如果 `expr` 为 0 ,返回 0。
|
- 如果 `expr` 为 0,返回 0。
|
||||||
- 如果 `expr` 为 NULL ,返回 NULL。
|
- 如果 `expr` 为 NULL,返回 NULL。
|
||||||
- 只能与普通列,选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。
|
- 只能与普通列,选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。
|
||||||
|
|
||||||
**举例**:
|
**举例**:
|
||||||
|
@ -519,7 +519,7 @@ DEGREES(expr)
|
||||||
|
|
||||||
**功能说明**:计算指定参数由弧度值转为角度后的值。
|
**功能说明**:计算指定参数由弧度值转为角度后的值。
|
||||||
|
|
||||||
**使用说明**:ver-3.3.3.0
|
**版本**:v3.3.3.0
|
||||||
|
|
||||||
**返回结果类型**:DOUBLE。
|
**返回结果类型**:DOUBLE。
|
||||||
|
|
||||||
|
@ -549,7 +549,7 @@ RADIANS(expr)
|
||||||
|
|
||||||
**功能说明**:计算指定参数由角度值转为弧度后的值。
|
**功能说明**:计算指定参数由角度值转为弧度后的值。
|
||||||
|
|
||||||
**使用说明**:ver-3.3.3.0
|
**版本**:v3.3.3.0
|
||||||
|
|
||||||
**返回结果类型**:DOUBLE。
|
**返回结果类型**:DOUBLE。
|
||||||
|
|
||||||
|
@ -721,7 +721,7 @@ TRIM([remstr FROM] expr)
|
||||||
|
|
||||||
**功能说明**:返回去掉了所有 remstr 前缀或后缀的字符串 epxr。
|
**功能说明**:返回去掉了所有 remstr 前缀或后缀的字符串 epxr。
|
||||||
|
|
||||||
**使用说明**:ver-3.3.3.0
|
**版本**:v3.3.3.0
|
||||||
|
|
||||||
**返回结果类型**:与输入字段 epxr 的原始类型相同。
|
**返回结果类型**:与输入字段 epxr 的原始类型相同。
|
||||||
|
|
||||||
|
@ -738,9 +738,9 @@ TRIM([remstr FROM] expr)
|
||||||
- LEADING 将移除字符串开头的指定字符。
|
- LEADING 将移除字符串开头的指定字符。
|
||||||
- TRAILING 将移除字符串末尾的指定字符。
|
- TRAILING 将移除字符串末尾的指定字符。
|
||||||
- BOTH(默认值)将移除字符串开头和末尾的指定字符。
|
- BOTH(默认值)将移除字符串开头和末尾的指定字符。
|
||||||
- 第二个可选变量 [remstr] 指定要裁剪掉的字符串:
|
- 第二个可选变量[remstr]指定要裁剪掉的字符串:
|
||||||
- 如果不指定 remstr,默认裁剪空格。
|
- 如果不指定 remstr,默认裁剪空格。
|
||||||
- remstr 可以指定多个字符,如 trim('ab' from 'abacd') ,此时会将 'ab' 看做一个整体来裁剪,得到裁剪结果 'acd'。
|
- remstr 可以指定多个字符,如 trim('ab' from 'abacd'),此时会将 'ab' 看做一个整体来裁剪,得到裁剪结果 'acd'。
|
||||||
- 若 expr 为 NULL,返回 NULL。
|
- 若 expr 为 NULL,返回 NULL。
|
||||||
- 该函数是多字节安全的。
|
- 该函数是多字节安全的。
|
||||||
|
|
||||||
|
@ -773,7 +773,7 @@ taos> select trim(both 'b' from 'bbbbbabbbbbb');
|
||||||
SUBSTRING/SUBSTR(expr, pos [, len])
|
SUBSTRING/SUBSTR(expr, pos [, len])
|
||||||
SUBSTRING/SUBSTR(expr FROM pos [FOR len])
|
SUBSTRING/SUBSTR(expr FROM pos [FOR len])
|
||||||
```
|
```
|
||||||
**功能说明**:返回字符串 `expr` 在 `pos` 位置开始的子串,若指定了 `len` ,则返回在 `pos` 位置开始,长度为 `len` 的子串。
|
**功能说明**:返回字符串 `expr` 在 `pos` 位置开始的子串,若指定了 `len`,则返回在 `pos` 位置开始,长度为 `len` 的子串。
|
||||||
|
|
||||||
**返回结果类型**:与输入字段 `expr` 的原始类型相同。
|
**返回结果类型**:与输入字段 `expr` 的原始类型相同。
|
||||||
|
|
||||||
|
@ -794,8 +794,8 @@ SUBSTRING/SUBSTR(expr FROM pos [FOR len])
|
||||||
- 若 `len` 小于 1,返回空串。
|
- 若 `len` 小于 1,返回空串。
|
||||||
- `pos` 是 1-base 的,若 `pos` 为 0,返回空串。
|
- `pos` 是 1-base 的,若 `pos` 为 0,返回空串。
|
||||||
- 若 `pos` + `len` 大于 `len(expr)`,返回从 `pos` 开始到字符串结尾的子串,等同于执行 `substring(expr, pos)`。
|
- 若 `pos` + `len` 大于 `len(expr)`,返回从 `pos` 开始到字符串结尾的子串,等同于执行 `substring(expr, pos)`。
|
||||||
- `SUBSTRING` 函数等价于 `SUBSTR`,从 3.3.3.0 版本开始支持。
|
- `SUBSTRING` 函数等价于 `SUBSTR`,从 v3.3.3.0 开始支持。
|
||||||
- `SUBSTRING/SUBSTR(expr FROM pos [FOR len])` 语法从 3.3.3.0 版本开始支持。
|
- `SUBSTRING/SUBSTR(expr FROM pos [FOR len])` 语法从 v3.3.3.0 开始支持。
|
||||||
|
|
||||||
**举例**:
|
**举例**:
|
||||||
```sql
|
```sql
|
||||||
|
@ -832,12 +832,12 @@ SUBSTRING_INDEX(expr, delim, count)
|
||||||
|
|
||||||
**功能说明**:返回字符串 `expr` 在出现指定次数分隔符的位置截取的子串。
|
**功能说明**:返回字符串 `expr` 在出现指定次数分隔符的位置截取的子串。
|
||||||
|
|
||||||
**使用说明**:ver-3.3.3.0
|
**版本**:v3.3.3.0
|
||||||
|
|
||||||
**返回结果类型**:与输入字段 `expr` 的原始类型相同。
|
**返回结果类型**:与输入字段 `expr` 的原始类型相同。
|
||||||
|
|
||||||
**适用数据类型**:
|
**适用数据类型**:
|
||||||
- `expr`:VARCHA、 NCHAR。
|
- `expr`:VARCHAR、NCHAR。
|
||||||
- `delim`:VARCHAR、NCHAR。
|
- `delim`:VARCHAR、NCHAR。
|
||||||
- `count`:INTEGER。
|
- `count`:INTEGER。
|
||||||
|
|
||||||
|
@ -887,18 +887,18 @@ CHAR(expr1 [, expr2] [, epxr3] ...)
|
||||||
|
|
||||||
**功能说明**:将输入参数当作整数,并返回这些整数在 ASCII 编码中对应的字符。
|
**功能说明**:将输入参数当作整数,并返回这些整数在 ASCII 编码中对应的字符。
|
||||||
|
|
||||||
**使用说明**:ver-3.3.3.0
|
**版本**:v3.3.3.0
|
||||||
|
|
||||||
**返回结果类型**:VARCHAR。
|
**返回结果类型**:VARCHAR。
|
||||||
|
|
||||||
**适用数据类型**:整数类型,VARCHAR,NCHAR。
|
**适用数据类型**:整数类型,VARCHAR、NCHAR。
|
||||||
|
|
||||||
**嵌套子查询支持**:适用于内层查询和外层查询。
|
**嵌套子查询支持**:适用于内层查询和外层查询。
|
||||||
|
|
||||||
**适用于**:表和超级表。
|
**适用于**:表和超级表。
|
||||||
|
|
||||||
**使用说明**:
|
**使用说明**:
|
||||||
- 输入的值超过 255 会被转化成多字节的结果,如 `CHAR(256)` 等同于 `CHAR(1,0)`,`CHAR(256 * 256)` 等同于 `CHAR(1,0,0)`。
|
- 输入的值超过 255 会被转化成多字节的结果,如 `CHAR(256)` 等同于 `CHAR(1,0)`、`CHAR(256 * 256)` 等同于 `CHAR(1,0,0)`。
|
||||||
- 输入参数的 NULL 值会被跳过。
|
- 输入参数的 NULL 值会被跳过。
|
||||||
- 输入参数若为字符串类型,会将其转换为数值类型处理。
|
- 输入参数若为字符串类型,会将其转换为数值类型处理。
|
||||||
- 若输入的参数对应的字符为不可打印字符,返回值中仍有该参数对应的字符,但是可能无法显示出来。
|
- 若输入的参数对应的字符为不可打印字符,返回值中仍有该参数对应的字符,但是可能无法显示出来。
|
||||||
|
@ -934,7 +934,7 @@ ASCII(expr)
|
||||||
|
|
||||||
**功能说明**:返回字符串第一个字符的 ASCII 码。
|
**功能说明**:返回字符串第一个字符的 ASCII 码。
|
||||||
|
|
||||||
**使用说明**:ver-3.3.3.0
|
**版本**:v3.3.3.0
|
||||||
|
|
||||||
**返回结果数据类型**:BIGINT。
|
**返回结果数据类型**:BIGINT。
|
||||||
|
|
||||||
|
@ -963,7 +963,7 @@ POSITION(expr1 IN expr2)
|
||||||
|
|
||||||
**功能说明**:计算字符串 `expr1` 在字符串 `expr2` 中的位置。
|
**功能说明**:计算字符串 `expr1` 在字符串 `expr2` 中的位置。
|
||||||
|
|
||||||
**使用说明**:ver-3.3.3.0
|
**版本**:v3.3.3.0
|
||||||
|
|
||||||
**返回结果类型**:BIGINT。
|
**返回结果类型**:BIGINT。
|
||||||
|
|
||||||
|
@ -1007,7 +1007,7 @@ REPLACE(expr, from_str, to_str)
|
||||||
```
|
```
|
||||||
**功能说明**:将字符串中的 `from_str` 全部替换为 `to_str`。
|
**功能说明**:将字符串中的 `from_str` 全部替换为 `to_str`。
|
||||||
|
|
||||||
**使用说明**:ver-3.3.3.0
|
**版本**:v3.3.3.0
|
||||||
|
|
||||||
**返回结果类型**:与输入字段 `expr` 的原始类型相同。
|
**返回结果类型**:与输入字段 `expr` 的原始类型相同。
|
||||||
|
|
||||||
|
@ -1039,7 +1039,7 @@ REPEAT(expr, count)
|
||||||
```
|
```
|
||||||
**功能说明**:返回将字符串重复指定次数得到的字符串。
|
**功能说明**:返回将字符串重复指定次数得到的字符串。
|
||||||
|
|
||||||
**使用说明**:ver-3.3.3.0
|
**版本**:v3.3.3.0
|
||||||
|
|
||||||
**返回结果类型**:与输入字段 `expr` 的原始类型相同。
|
**返回结果类型**:与输入字段 `expr` 的原始类型相同。
|
||||||
|
|
||||||
|
@ -1081,7 +1081,7 @@ CAST(expr AS type_name)
|
||||||
|
|
||||||
**返回结果类型**:CAST 中指定的类型(type_name)。
|
**返回结果类型**:CAST 中指定的类型(type_name)。
|
||||||
|
|
||||||
**适用数据类型**:输入参数 expr 的类型可以是除JSON和VARBINARY外的所有类型。如果 type_name 为 VARBINARY,则 expr 只能是 VARCHAR 类型。
|
**适用数据类型**:输入参数 expr 的类型可以是除 JSON 和 VARBINARY 外的所有类型。如果 type_name 为 VARBINARY,则 expr 只能是 VARCHAR 类型。
|
||||||
|
|
||||||
**嵌套子查询支持**:适用于内层查询和外层查询。
|
**嵌套子查询支持**:适用于内层查询和外层查询。
|
||||||
|
|
||||||
|
@ -1091,9 +1091,9 @@ CAST(expr AS type_name)
|
||||||
|
|
||||||
- 对于不能支持的类型转换会直接报错。
|
- 对于不能支持的类型转换会直接报错。
|
||||||
- 对于类型支持但某些值无法正确转换的情况,对应的转换后的值以转换函数输出为准。目前可能遇到的几种情况:
|
- 对于类型支持但某些值无法正确转换的情况,对应的转换后的值以转换函数输出为准。目前可能遇到的几种情况:
|
||||||
1)字符串类型转换数值类型时可能出现的无效字符情况,例如 "a" 可能转为 0,但不会报错。
|
- 字符串类型转换数值类型时可能出现的无效字符情况,例如 "a" 可能转为 0,但不会报错。
|
||||||
2)转换到数值类型时,数值大于 type_name 可表示的范围时,则会溢出,但不会报错。
|
- 转换到数值类型时,数值大于 type_name 可表示的范围时,则会溢出,但不会报错。
|
||||||
3)转换到字符串类型时,如果转换后长度超过 type_name 中指定的长度,则会截断,但不会报错。
|
- 转换到字符串类型时,如果转换后长度超过 type_name 中指定的长度,则会截断,但不会报错。
|
||||||
|
|
||||||
#### TO_ISO8601
|
#### TO_ISO8601
|
||||||
|
|
||||||
|
@ -1113,8 +1113,8 @@ TO_ISO8601(expr [, timezone])
|
||||||
|
|
||||||
**使用说明**:
|
**使用说明**:
|
||||||
|
|
||||||
- timezone 参数允许输入的时区格式为:[z/Z, +/-hhmm, +/-hh, +/-hh:mm]。例如 TO_ISO8601(1, "+00:00")。
|
- timezone 参数允许输入的时区格式为:[z/Z, +/-hhmm, +/-hh, +/-hh:mm]。例如,TO_ISO8601(1, "+00:00")。
|
||||||
- 输入时间戳的精度由所查询表的精度确定,若未指定表,则精度为毫秒。
|
- 输入时间戳的精度由所查询表的精度确定,若未指定表,则精度为毫秒.
|
||||||
|
|
||||||
|
|
||||||
#### TO_JSON
|
#### TO_JSON
|
||||||
|
@ -1127,7 +1127,7 @@ TO_JSON(str_literal)
|
||||||
|
|
||||||
**返回结果数据类型**:JSON。
|
**返回结果数据类型**:JSON。
|
||||||
|
|
||||||
**适用数据类型**:JSON 字符串,形如 '\{ "literal" : literal }'。'\{}' 表示空值。键必须为字符串字面量,值可以为数值字面量、字符串字面量、布尔字面量或空值字面量。str_literal 中不支持转义符。
|
**适用数据类型**:JSON 字符串,形如 '\{ "literal" : literal }'。'\{}'表示空值。键必须为字符串字面量,值可以为数值字面量、字符串字面量、布尔字面量或空值字面量。str_literal 中不支持转义符。
|
||||||
|
|
||||||
**嵌套子查询支持**:适用于内层查询和外层查询。
|
**嵌套子查询支持**:适用于内层查询和外层查询。
|
||||||
|
|
||||||
|
@ -1167,9 +1167,9 @@ return_timestamp: {
|
||||||
TO_CHAR(ts, format_str_literal)
|
TO_CHAR(ts, format_str_literal)
|
||||||
```
|
```
|
||||||
|
|
||||||
**功能说明**:将timestamp类型按照指定格式转换为字符串。
|
**功能说明**:将 timestamp 类型按照指定格式转换为字符串。
|
||||||
|
|
||||||
**使用说明**:ver-3.2.2.0
|
**使用说明**:vv3.2.2.0
|
||||||
|
|
||||||
**返回结果数据类型**:VARCHAR。
|
**返回结果数据类型**:VARCHAR。
|
||||||
|
|
||||||
|
@ -1185,16 +1185,16 @@ TO_CHAR(ts, format_str_literal)
|
||||||
| ------------------- | ----------------------------------------- | ------------------------- |
|
| ------------------- | ----------------------------------------- | ------------------------- |
|
||||||
| AM,am,PM,pm | 无点分隔的上午下午 | 07:00:00am |
|
| AM,am,PM,pm | 无点分隔的上午下午 | 07:00:00am |
|
||||||
| A.M.,a.m.,P.M.,p.m. | 有点分隔的上午下午 | 07:00:00a.m. |
|
| A.M.,a.m.,P.M.,p.m. | 有点分隔的上午下午 | 07:00:00a.m. |
|
||||||
| YYYY,yyyy | 年,4个及以上数字 | 2023-10-10 |
|
| YYYY,yyyy | 年,4 个及以上数字 | 2023-10-10 |
|
||||||
| YYY,yyy | 年,最后3位数字 | 023-10-10 |
|
| YYY,yyy | 年,最后 3 位数字 | 023-10-10 |
|
||||||
| YY,yy | 年,最后2位数字 | 23-10-10 |
|
| YY,yy | 年,最后 2 位数字 | 23-10-10 |
|
||||||
| Y,y | 年,最后一位数字 | 3-10-10 |
|
| Y,y | 年,最后一位数字 | 3-10-10 |
|
||||||
| MONTH | 月,全大写 | 2023-JANUARY-01 |
|
| MONTH | 月,全大写 | 2023-JANUARY-01 |
|
||||||
| Month | 月,首字母大写 | 2023-January-01 |
|
| Month | 月,首字母大写 | 2023-January-01 |
|
||||||
| month | 月,全小写 | 2023-january-01 |
|
| month | 月,全小写 | 2023-january-01 |
|
||||||
| MON | 月,缩写,全大写(三个字符) | JAN, SEP |
|
| MON | 月,缩写,全大写(三个字符) | JAN、SEP |
|
||||||
| Mon | 月,缩写,首字母大写 | Jan, Sep |
|
| Mon | 月,缩写,首字母大写 | Jan、Sep |
|
||||||
| mon | 月,缩写,全小写 | jan, sep |
|
| mon | 月,缩写,全小写 | jan、sep |
|
||||||
| MM,mm | 月,数字 01-12 | 2023-01-01 |
|
| MM,mm | 月,数字 01-12 | 2023-01-01 |
|
||||||
| DD,dd | 月日,01-31 | |
|
| DD,dd | 月日,01-31 | |
|
||||||
| DAY | 周日,全大写 | MONDAY |
|
| DAY | 周日,全大写 | MONDAY |
|
||||||
|
@ -1206,7 +1206,7 @@ TO_CHAR(ts, format_str_literal)
|
||||||
| DDD | 年日,001-366 | |
|
| DDD | 年日,001-366 | |
|
||||||
| D,d | 周日,数字,1-7,Sunday(1) to Saturday(7) | |
|
| D,d | 周日,数字,1-7,Sunday(1) to Saturday(7) | |
|
||||||
| HH24,hh24 | 小时,00-23 | 2023-01-30 23:59:59 |
|
| HH24,hh24 | 小时,00-23 | 2023-01-30 23:59:59 |
|
||||||
| hh12,HH12, hh, HH | 小时,01-12 | 2023-01-30 12:59:59PM |
|
| hh12,HH12,hh,HH | 小时,01-12 | 2023-01-30 12:59:59PM |
|
||||||
| MI,mi | 分钟,00-59 | |
|
| MI,mi | 分钟,00-59 | |
|
||||||
| SS,ss | 秒,00-59 | |
|
| SS,ss | 秒,00-59 | |
|
||||||
| MS,ms | 毫秒,000-999 | |
|
| MS,ms | 毫秒,000-999 | |
|
||||||
|
@ -1215,10 +1215,10 @@ TO_CHAR(ts, format_str_literal)
|
||||||
| TZH,tzh | 时区小时 | 2023-01-30 11:59:59PM +08 |
|
| TZH,tzh | 时区小时 | 2023-01-30 11:59:59PM +08 |
|
||||||
|
|
||||||
**使用说明**:
|
**使用说明**:
|
||||||
- `Month`、`Day` 等的输出格式是左对齐的,右侧添加空格,如 `2023-OCTOBER -01`、`2023-SEPTEMBER-01`,9 月是月份中英文字母数最长的,因此 9 月没有空格。星期类似。
|
- `Month`、`Day`等的输出格式是左对齐的,右侧添加空格,如 `2023-OCTOBER -01`、`2023-SEPTEMBER-01`,9 月是月份中英文字母数最长的,因此 9 月没有空格。星期类似。
|
||||||
- 使用 `ms`、`us`、`ns` 时,以上三种格式的输出只在精度上不同,比如 ts 为 `1697182085123`,`ms` 的输出为 `123`,`us` 的输出为 `123000`,`ns` 的输出为 `123000000`。
|
- 使用`ms`、`us`、`ns`时,以上三种格式的输出只在精度上不同,比如 ts 为 `1697182085123`,`ms` 的输出为 `123`,`us` 的输出为 `123000`,`ns` 的输出为 `123000000`。
|
||||||
- 时间格式中无法匹配规则的内容会直接输出。如果想要在格式串中指定某些能够匹配规则的部分不做转换,可以使用双引号,如 `to_char(ts, 'yyyy-mm-dd "is formated by yyyy-mm-dd"')`。如果想要输出双引号,那么在双引号之前加一个反斜杠,如 `to_char(ts, '\"yyyy-mm-dd\"')` 将会输出 `"2023-10-10"`。
|
- 时间格式中无法匹配规则的内容会直接输出。如果想要在格式串中指定某些能够匹配规则的部分不做转换,可以使用双引号,如 `to_char(ts, 'yyyy-mm-dd "is formated by yyyy-mm-dd"')`。如果想要输出双引号,那么在双引号之前加一个反斜杠,如 `to_char(ts, '\"yyyy-mm-dd\"')` 将会输出 `"2023-10-10"`。
|
||||||
- 那些输出是数字的格式,如 `YYYY`、`DD`,大写与小写意义相同,即 `yyyy` 和 `YYYY` 可以互换。
|
- 那些输出是数字的格式,如`YYYY`、`DD`,大写与小写意义相同,即 `yyyy` 和 `YYYY` 可以互换。
|
||||||
- 推荐在时间格式中带时区信息,如果不带则默认输出的时区为服务端或客户端所配置的时区。
|
- 推荐在时间格式中带时区信息,如果不带则默认输出的时区为服务端或客户端所配置的时区。
|
||||||
- 输入时间戳的精度由所查询表的精度确定,若未指定表,则精度为毫秒。
|
- 输入时间戳的精度由所查询表的精度确定,若未指定表,则精度为毫秒。
|
||||||
|
|
||||||
|
@ -1230,7 +1230,7 @@ TO_TIMESTAMP(ts_str_literal, format_str_literal)
|
||||||
|
|
||||||
**功能说明**:将字符串按照指定格式转化为时间戳。
|
**功能说明**:将字符串按照指定格式转化为时间戳。
|
||||||
|
|
||||||
**使用说明**:ver-3.2.2.0
|
**使用说明**:v3.2.2.0
|
||||||
|
|
||||||
**返回结果数据类型**:TIMESTAMP。
|
**返回结果数据类型**:TIMESTAMP。
|
||||||
|
|
||||||
|
@ -1245,7 +1245,7 @@ TO_TIMESTAMP(ts_str_literal, format_str_literal)
|
||||||
**使用说明**:
|
**使用说明**:
|
||||||
- 若 `ms`、`us`、`ns` 同时指定,那么结果时间戳包含上述三个字段的和,如 `to_timestamp('2023-10-10 10:10:10.123.000456.000000789', 'yyyy-mm-dd hh:mi:ss.ms.us.ns')` 输出为 `2023-10-10 10:10:10.123456789`对应的时间戳。
|
- 若 `ms`、`us`、`ns` 同时指定,那么结果时间戳包含上述三个字段的和,如 `to_timestamp('2023-10-10 10:10:10.123.000456.000000789', 'yyyy-mm-dd hh:mi:ss.ms.us.ns')` 输出为 `2023-10-10 10:10:10.123456789`对应的时间戳。
|
||||||
- `MONTH`、`MON`、`DAY`、`DY` 以及其他输出为数字的格式的大小写意义相同,如 `to_timestamp('2023-JANUARY-01', 'YYYY-month-dd')`,`month`可以被替换为 `MONTH` 或者 `Month`。
|
- `MONTH`、`MON`、`DAY`、`DY` 以及其他输出为数字的格式的大小写意义相同,如 `to_timestamp('2023-JANUARY-01', 'YYYY-month-dd')`,`month`可以被替换为 `MONTH` 或者 `Month`。
|
||||||
- 如果同一字段被指定了多次,那么前面的指定将会被覆盖,如 `to_timestamp('2023-22-10-10', 'yyyy-yy-MM-dd')`,输出年份是`2022`。
|
- 如果同一字段被指定了多次,那么前面的指定将会被覆盖,如 `to_timestamp('2023-22-10-10', 'yyyy-yy-MM-dd')`,输出年份是 `2022`。
|
||||||
- 为避免转换时使用了非预期的时区,推荐在时间中携带时区信息,例如 '2023-10-10 10:10:10+08',如果未指定时区则默认时区为服务端或客户端指定的时区。
|
- 为避免转换时使用了非预期的时区,推荐在时间中携带时区信息,例如 '2023-10-10 10:10:10+08',如果未指定时区则默认时区为服务端或客户端指定的时区。
|
||||||
- 如果没有指定完整的时间,那么默认时间值为指定或默认时区的 `1970-01-01 00:00:00`,未指定部分使用该默认值中的对应部分。暂不支持只指定年日而不指定月日的格式,如 'yyyy-mm-DDD',支持'yyyy-mm-DD'。
|
- 如果没有指定完整的时间,那么默认时间值为指定或默认时区的 `1970-01-01 00:00:00`,未指定部分使用该默认值中的对应部分。暂不支持只指定年日而不指定月日的格式,如 'yyyy-mm-DDD',支持'yyyy-mm-DD'。
|
||||||
- 如果格式串中有`AM`、`PM`等,那么小时必须是 12 小时制,范围必须是 01-12。
|
- 如果格式串中有`AM`、`PM`等,那么小时必须是 12 小时制,范围必须是 01-12。
|
||||||
|
@ -1293,10 +1293,10 @@ TIMEDIFF(expr1, expr2 [, time_unit])
|
||||||
**返回结果类型**:BIGINT。
|
**返回结果类型**:BIGINT。
|
||||||
|
|
||||||
**适用数据类型**:
|
**适用数据类型**:
|
||||||
- `expr1`:表示时间戳的 BIGIN、 TIMESTAMP 类型,或符合 ISO8601/RFC3339 标准的日期时间格式的 VARCHAR、NCHAR 类型。
|
- `expr1`:表示时间戳的 BIGINT、TIMESTAMP 类型,或符合 ISO8601/RFC3339 标准的日期时间格式的 VARCHAR、NCHAR 类型。
|
||||||
- `expr2`:表示时间戳的 BIGINT、TIMESTAMP 类型,或符合 ISO8601/RFC3339 标准的日期时间格式的 VARCHAR、NCHAR 类型。
|
- `expr2`:表示时间戳的 BIGINT、TIMESTAMP 类型,或符合 ISO8601/RFC3339 标准的日期时间格式的 VARCHAR、NCHAR 类型。
|
||||||
- `time_unit`:见使用说明。
|
- `time_unit`:见使用说明。
|
||||||
- 3.3.3.0 版本之前该函数结果为时间戳 `expr1` 和 `expr2` 的差值的绝对值,结果为正数。
|
- v3.3.3.0 之前该函数结果为时间戳 `expr1` 和 `expr2` 的差值的绝对值,结果为正数。
|
||||||
|
|
||||||
**嵌套子查询支持**:适用于内层查询和外层查询。
|
**嵌套子查询支持**:适用于内层查询和外层查询。
|
||||||
|
|
||||||
|
@ -1351,8 +1351,9 @@ use_current_timezone: {
|
||||||
值 0 表示使用 UTC 时区进行截断,值 1 表示使用当前时区进行截断。
|
值 0 表示使用 UTC 时区进行截断,值 1 表示使用当前时区进行截断。
|
||||||
例如客户端所配置时区为 UTC+0800,则 TIMETRUNCATE('2020-01-01 23:00:00', 1d, 0) 返回结果为东八区时间 '2020-01-01 08:00:00'。
|
例如客户端所配置时区为 UTC+0800,则 TIMETRUNCATE('2020-01-01 23:00:00', 1d, 0) 返回结果为东八区时间 '2020-01-01 08:00:00'。
|
||||||
而使用 TIMETRUNCATE('2020-01-01 23:00:00', 1d, 1) 时,返回结果为东八区时间 '2020-01-01 00:00:00'。
|
而使用 TIMETRUNCATE('2020-01-01 23:00:00', 1d, 1) 时,返回结果为东八区时间 '2020-01-01 00:00:00'。
|
||||||
当不指定 use_current_timezone 时,use_current_timezone 默认值为 1 。
|
当不指定 use_current_timezone 时,use_current_timezone 默认值为 1。
|
||||||
- 当将时间值截断到一周(1w)时,timetruncate 的计算是基于 Unix 时间戳(1970年1月1日00:00:00 UTC)进行的。Unix 时间戳始于星期四,因此所有截断后的日期都是星期四。
|
- 当将时间值截断到一周(1w)时,timetruncate 的计算是基于 Unix 时间戳(1970年1月1日00:00:00 UTC)进行的。Unix 时间戳始于星期四,
|
||||||
|
因此所有截断后的日期都是星期四。
|
||||||
|
|
||||||
|
|
||||||
#### TIMEZONE
|
#### TIMEZONE
|
||||||
|
@ -1396,13 +1397,13 @@ WEEK(expr [, mode])
|
||||||
```
|
```
|
||||||
**功能说明**:返回输入日期的周数。
|
**功能说明**:返回输入日期的周数。
|
||||||
|
|
||||||
**使用说明**:ver-3.3.3.0
|
**版本**:v3.3.3.0
|
||||||
|
|
||||||
**返回结果类型**:BIGINT。
|
**返回结果类型**:BIGINT。
|
||||||
|
|
||||||
**适用数据类型**:
|
**适用数据类型**:
|
||||||
- `expr`:表示时间戳的 BIGINT、TIMESTAMP 类型,或符合 ISO8601/RFC3339 标准的日期时间格式的 VARCHAR、NCHAR 类型。
|
- `expr`:表示时间戳的 BIGINT、TIMESTAMP 类型,或符合 ISO8601/RFC3339 标准的日期时间格式的 VARCHAR、NCHAR 类型。
|
||||||
- `mode`:0-7 之间的整数。
|
- `mode`:0 - 7 之间的整数。
|
||||||
|
|
||||||
**嵌套子查询支持**:适用于内层查询和外层查询。
|
**嵌套子查询支持**:适用于内层查询和外层查询。
|
||||||
|
|
||||||
|
@ -1410,8 +1411,8 @@ WEEK(expr [, mode])
|
||||||
|
|
||||||
**使用说明**:
|
**使用说明**:
|
||||||
- 若 `expr` 为 NULL,返回 NULL。
|
- 若 `expr` 为 NULL,返回 NULL。
|
||||||
- 输入时间戳的精度由所查询表的精度确定,若未指定表,则精度为毫秒。
|
- 输入时间戳的精度由所查询表的精度确定,若未指定表,则精度为毫秒.
|
||||||
- `mode` 用来指定一周是从周日开始还是周一开始,以及指定返回值范围是 1-53 还是 0-53。下表详细描述不同的 mode 对应的计算方法:
|
- `mode` 用来指定一周是从周日开始还是周一开始,以及指定返回值范围是 1 - 53 还是 0 - 53。下表详细描述不同的 mode 对应的计算方法:
|
||||||
|
|
||||||
| Mode | 每周的第一天 | 返回值范围 | 第 1 周的计算方法 |
|
| Mode | 每周的第一天 | 返回值范围 | 第 1 周的计算方法 |
|
||||||
| ---- | ------ | ------ | ------------------ |
|
| ---- | ------ | ------ | ------------------ |
|
||||||
|
@ -1423,12 +1424,12 @@ WEEK(expr [, mode])
|
||||||
| 5 | 周一 | 0 - 53 | 第一个包含周一的周为第 1 周 |
|
| 5 | 周一 | 0 - 53 | 第一个包含周一的周为第 1 周 |
|
||||||
| 6 | 周日 | 1 - 53 | 第一个包含四天及以上的周为第 1 周 |
|
| 6 | 周日 | 1 - 53 | 第一个包含四天及以上的周为第 1 周 |
|
||||||
| 7 | 周一 | 1 - 53 | 第一个包含周一的周为第 1 周 |
|
| 7 | 周一 | 1 - 53 | 第一个包含周一的周为第 1 周 |
|
||||||
- 当返回值范围为 0-53 时,第 1 周之前的日期为第 0 周。
|
- 当返回值范围为 0 - 53 时,第 1 周之前的日期为第 0 周。
|
||||||
- 当返回值范围为 1-53 时,第 1 周之前的日期为上一年的最后一周。
|
- 当返回值范围为 1 - 53 时,第 1 周之前的日期为上一年的最后一周。
|
||||||
- 以 `2000-01-01` 为例,
|
- 以`2000-01-01`为例,
|
||||||
- 在 `mode=0`时返回值为 `0`,因为该年第一个周日为 `2000-01-02`,从 `2000-01-02` 起才是第一周,所以 `2000-01-01`为第 0 周,返回 0。
|
- 在 `mode=0` 时返回值为 `0`,因为该年第一个周日为 `2000-01-02`,从 `2000-01-02` 起才是第 1 周,所以 `2000-01-01` 为第 0 周,返回 0。
|
||||||
- 在 `mode=1`时返回值为 `0`,因为 `2000-01-01` 所在的周只有两天,分别是 `2000-01-01(周六)` 和 `2000-01-02(周日)`,所以 `2000-01-03` 起才是第一周,`2000-01-01`为第 0 周,返回 0。
|
- 在 `mode=1` 时返回值为 `0`,因为 `2000-01-01` 所在的周只有两天,分别是 `2000-01-01(周六)` 和 `2000-01-02(周日)`,所以 `2000-01-03` 起才是第一周,`2000-01-01`为第 0 周,返回 0。
|
||||||
- 在 `mode=2`时返回值为 `52`,因为从 `2000-01-02` 起才是第一周,并且返回值范围为 1-53,所以 `2000-01-01` 算做上一年的最后一周,即 1999 年的第 52 周,返回 52。
|
- 在 `mode=2` 时返回值为 `52`,因为从 `2000-01-02` 起才是第 1 周,并且返回值范围为 1-53,所以 `2000-01-01` 算做上一年的最后一周,即 1999 年的第 52 周,返回 52。
|
||||||
|
|
||||||
**举例**:
|
**举例**:
|
||||||
```sql
|
```sql
|
||||||
|
@ -1459,7 +1460,7 @@ WEEKOFYEAR(expr)
|
||||||
```
|
```
|
||||||
**功能说明**:返回输入日期的周数。
|
**功能说明**:返回输入日期的周数。
|
||||||
|
|
||||||
**使用说明**:ver-3.3.3.0
|
**版本**:v3.3.3.0
|
||||||
|
|
||||||
**返回结果类型**:BIGINT。
|
**返回结果类型**:BIGINT。
|
||||||
|
|
||||||
|
@ -1472,7 +1473,7 @@ WEEKOFYEAR(expr)
|
||||||
**使用说明**:
|
**使用说明**:
|
||||||
- 等同于`WEEK(expr, 3)`,即在每周第一天是周一,返回值范围为 1-53,第一个包含四天及以上的周为第 1 周的条件下判断输入日期的周数。
|
- 等同于`WEEK(expr, 3)`,即在每周第一天是周一,返回值范围为 1-53,第一个包含四天及以上的周为第 1 周的条件下判断输入日期的周数。
|
||||||
- 若 `expr` 为 NULL,返回 NULL。
|
- 若 `expr` 为 NULL,返回 NULL。
|
||||||
- 输入时间戳的精度由所查询表的精度确定,若未指定表,则精度为毫秒。
|
- 输入时间戳的精度由所查询表的精度确定,未未指定表,则精度为毫秒。
|
||||||
|
|
||||||
**举例**:
|
**举例**:
|
||||||
```sql
|
```sql
|
||||||
|
@ -1488,11 +1489,11 @@ WEEKDAY(expr)
|
||||||
```
|
```
|
||||||
**功能说明**:返回输入日期是周几。
|
**功能说明**:返回输入日期是周几。
|
||||||
|
|
||||||
**使用说明**:ver-3.3.3.0
|
**版本**:v3.3.3.0
|
||||||
|
|
||||||
**返回结果类型**:BIGINT。
|
**返回结果类型**:BIGINT。
|
||||||
|
|
||||||
**适用数据类型**:表示 表示时间戳的 BIGINT、TIMESTAMP 类型,或符合 ISO8601/RFC3339 标准的日期时间格式的 VARCHAR、NCHAR 类型。
|
**适用数据类型**:表示时间戳的 BIGINT、TIMESTAMP 类型,或符合 ISO8601/RFC3339 标准的日期时间格式的 VARCHAR、NCHAR 类型。
|
||||||
|
|
||||||
**嵌套子查询支持**:适用于内层查询和外层查询。
|
**嵌套子查询支持**:适用于内层查询和外层查询。
|
||||||
|
|
||||||
|
@ -1517,7 +1518,7 @@ DAYOFWEEK(expr)
|
||||||
```
|
```
|
||||||
**功能说明**:返回输入日期是周几。
|
**功能说明**:返回输入日期是周几。
|
||||||
|
|
||||||
**使用说明**:ver-3.3.3.0
|
**版本**:v3.3.3.0
|
||||||
|
|
||||||
**返回结果类型**:BIGINT。
|
**返回结果类型**:BIGINT。
|
||||||
|
|
||||||
|
@ -1567,9 +1568,9 @@ algo_type: {
|
||||||
**适用于**:表和超级表。
|
**适用于**:表和超级表。
|
||||||
|
|
||||||
**说明**:
|
**说明**:
|
||||||
- p 值范围是 [0,100],当为 0 时等同于 MIN,为 100 时等同于 MAX。
|
- p 值范围是 [0,100],当为 0 时等同 于 MIN,为 100 时等同于 MAX。
|
||||||
- algo_type 取值为 "default" 或 "t-digest"。输入为 "default" 时函数使用基于直方图算法进行计算。输入为 "t-digest" 时使用t-digest算法计算分位数的近似结果。如果不指定 algo_type 则使用 "default" 算法。
|
- algo_type 取值为 "default" 或 "t-digest"。输入为 "default" 时函数使用基于直方图算法进行计算。输入为 "t-digest" 时使用 t-digest 算法计算分位数的近似结果。如果不指定 algo_type 则使用 "default" 算法。
|
||||||
- "t-digest" 算法的近似结果对于输入数据顺序敏感,对超级表查询时不同的输入排序结果可能会有微小的误差。
|
- t-digest 算法的近似结果对于输入数据顺序敏感,对超级表查询时不同的输入排序结果可能会有微小的误差。
|
||||||
|
|
||||||
### AVG
|
### AVG
|
||||||
|
|
||||||
|
@ -1602,7 +1603,7 @@ COUNT({* | expr})
|
||||||
|
|
||||||
**使用说明**:
|
**使用说明**:
|
||||||
|
|
||||||
- 可以使用星号(\*)来替代具体的字段,使用星号(\*)返回全部记录数量。
|
- 可以使用星号 (\*) 来替代具体的字段,使用星号 (\*) 返回全部记录数量。
|
||||||
- 如果统计字段是具体的列,则返回该列中非 NULL 值的记录数量。
|
- 如果统计字段是具体的列,则返回该列中非 NULL 值的记录数量。
|
||||||
|
|
||||||
|
|
||||||
|
@ -1628,7 +1629,7 @@ ELAPSED(ts_primary_key [, time_unit])
|
||||||
- order by asc/desc 不影响差值的计算结果。
|
- order by asc/desc 不影响差值的计算结果。
|
||||||
- 对于超级表,需要和 group by tbname 子句组合使用,不可以直接使用。
|
- 对于超级表,需要和 group by tbname 子句组合使用,不可以直接使用。
|
||||||
- 对于普通表,不支持和 group by 子句组合使用。
|
- 对于普通表,不支持和 group by 子句组合使用。
|
||||||
- 对于嵌套查询,仅当内层查询会输出隐式时间戳列时有效。例如 select elapsed(ts) from (select diff(value) from sub1) 语句,diff 函数会让内层查询输出隐式时间戳列,此为主键列,可以用于 elapsed 函数的第一个参数。相反,例如 select elapsed(ts) from (select * from sub1) 语句,ts 列输出到外层时已经没有了主键列的含义,无法使用 elapsed 函数。此外,elapsed 函数作为一个与时间线强依赖的函数,形如 select elapsed(ts) from (select diff(value) from st group by tbname)尽 管会返回一条计算结果,但并无实际意义,这种用法后续也将被限制。
|
- 对于嵌套查询,仅当内层查询会输出隐式时间戳列时有效。例如 `select elapsed(ts) from (select diff(value) from sub1)` 语句,diff 函数会让内层查询输出隐式时间戳列,此为主键列,可以用于 elapsed 函数的第一个参数。相反,例如 `select elapsed(ts) from (select * from sub1)` 语句,ts 列输出到外层时已经没有了主键列的含义,无法使用 elapsed 函数。此外,elapsed 函数作为一个与时间线强依赖的函数,形如 `select elapsed(ts) from (select diff(value) from st group by tbname)` 尽管会返回一条计算结果,但并无实际意义,这种用法后续也将被限制。
|
||||||
- 不支持与 leastsquares、diff、derivative、top、bottom、last_row、interp 等函数混合使用。
|
- 不支持与 leastsquares、diff、derivative、top、bottom、last_row、interp 等函数混合使用。
|
||||||
|
|
||||||
|
|
||||||
|
@ -1677,7 +1678,7 @@ STDDEV/STDDEV_POP(expr)
|
||||||
**适用于**:表和超级表。
|
**适用于**:表和超级表。
|
||||||
|
|
||||||
**说明**:
|
**说明**:
|
||||||
- `STDDEV_POP` 函数等价于 `STDDEV` 函数,从 3.3.3.0 版本开始支持。
|
- `STDDEV_POP` 函数等价于 `STDDEV` 函数,从 v3.3.3.0 开始支持。
|
||||||
|
|
||||||
**举例**:
|
**举例**:
|
||||||
```sql
|
```sql
|
||||||
|
@ -1702,7 +1703,7 @@ VAR_POP(expr)
|
||||||
|
|
||||||
**功能说明**:统计表中某列的总体方差。
|
**功能说明**:统计表中某列的总体方差。
|
||||||
|
|
||||||
**使用说明**:ver-3.3.3.0
|
**版本**:v3.3.3.0
|
||||||
|
|
||||||
**返回数据类型**:DOUBLE。
|
**返回数据类型**:DOUBLE。
|
||||||
|
|
||||||
|
@ -1710,7 +1711,7 @@ VAR_POP(expr)
|
||||||
|
|
||||||
**适用于**:表和超级表。
|
**适用于**:表和超级表。
|
||||||
|
|
||||||
**举例**:
|
**举例**:
|
||||||
```sql
|
```sql
|
||||||
taos> select id from test_var;
|
taos> select id from test_var;
|
||||||
id |
|
id |
|
||||||
|
@ -1749,7 +1750,7 @@ HYPERLOGLOG(expr)
|
||||||
|
|
||||||
**功能说明**:
|
**功能说明**:
|
||||||
- 采用 hyperloglog 算法,返回某列的基数。该算法在数据量很大的情况下,可以明显降低内存的占用,求出来的基数是个估算值,标准误差(标准误差是多次实验,每次的平均数的标准差,不是与真实结果的误差)为 0.81%。
|
- 采用 hyperloglog 算法,返回某列的基数。该算法在数据量很大的情况下,可以明显降低内存的占用,求出来的基数是个估算值,标准误差(标准误差是多次实验,每次的平均数的标准差,不是与真实结果的误差)为 0.81%。
|
||||||
- 在数据量较少的时候该算法不是很准确,可以使用 select count(data) from (select unique(col) as data from table) 的方法。
|
- 在数据量较少的时候该算法不是很准确,可以使用 `select count(data) from (select unique(col) as data from table)` 的方法。
|
||||||
|
|
||||||
**返回结果类型**:INTEGER。
|
**返回结果类型**:INTEGER。
|
||||||
|
|
||||||
|
@ -1779,13 +1780,13 @@ HISTOGRAM(expr,bin_type, bin_description, normalized)
|
||||||
用户指定 bin 的具体数值。
|
用户指定 bin 的具体数值。
|
||||||
|
|
||||||
- "linear_bin": "\{"start": 0.0, "width": 5.0, "count": 5, "infinity": true}"
|
- "linear_bin": "\{"start": 0.0, "width": 5.0, "count": 5, "infinity": true}"
|
||||||
"start" 表示数据起始点,"width" 表示每次 bin 偏移量, "count" 为 bin 的总数,"infinity" 表示是否添加(-inf, inf)作为区间起点和终点,
|
"start" 表示数据起始点,"width" 表示每次 bin 偏移量,"count" 为 bin 的总数,"infinity" 表示是否添加(-inf, inf)作为区间起点和终点,
|
||||||
生成区间为[-inf, 0.0, 5.0, 10.0, 15.0, 20.0, +inf]。
|
生成区间为[-inf, 0.0, 5.0, 10.0, 15.0, 20.0, +inf]。
|
||||||
|
|
||||||
- "log_bin": "\{"start":1.0, "factor": 2.0, "count": 5, "infinity": true}"
|
- "log_bin": "\{"start":1.0, "factor": 2.0, "count": 5, "infinity": true}"
|
||||||
"start" 表示数据起始点,"factor" 表示按指数递增的因子,"count" 为 bin 的总数,"infinity" 表示是否添加(-inf, inf)作为区间起点和终点,
|
"start" 表示数据起始点,"factor" 表示按指数递增的因子,"count" 为 bin 的总数,"infinity" 表示是否添加(-inf, inf)作为区间起点和终点,
|
||||||
生成区间为[-inf, 1.0, 2.0, 4.0, 8.0, 16.0, +inf]。
|
生成区间为[-inf, 1.0, 2.0, 4.0, 8.0, 16.0, +inf]。
|
||||||
- normalized 是否将返回结果归一化到 0~1 之间 。有效输入为 0 和 1。
|
- normalized 是否将返回结果归一化到 0~1 之间。有效输入为 0 和 1。
|
||||||
|
|
||||||
|
|
||||||
### PERCENTILE
|
### PERCENTILE
|
||||||
|
@ -1804,9 +1805,9 @@ PERCENTILE(expr, p [, p1] ... )
|
||||||
|
|
||||||
**使用说明**:
|
**使用说明**:
|
||||||
|
|
||||||
- *P*值取值范围 0≤*P*≤100,为 0 的时候等同于 MIN,为 100 的时候等同于 MAX;
|
- *P* 值取值范围 0≤*P*≤100,为 0 的时候等同于 MIN,为 100 的时候等同于 MAX;
|
||||||
- 同时计算针对同一列的多个分位数时,建议使用一个PERCENTILE函数和多个参数的方式,能很大程度上降低查询的响应时间。
|
- 同时计算针对同一列的多个分位数时,建议使用一个 PERCENTILE 函数和多个参数的方式,能很大程度上降低查询的响应时间。
|
||||||
比如,使用查询SELECT percentile(col, 90, 95, 99) FROM table,性能会优于SELECT percentile(col, 90), percentile(col, 95), percentile(col, 99) from table。
|
比如,使用查询 `SELECT percentile(col, 90, 95, 99) FROM table`,性能会优于 `SELECT percentile(col, 90), percentile(col, 95), percentile(col, 99) from table`。
|
||||||
|
|
||||||
|
|
||||||
## 选择函数
|
## 选择函数
|
||||||
|
@ -1829,7 +1830,7 @@ BOTTOM(expr, k)
|
||||||
|
|
||||||
**使用说明**:
|
**使用说明**:
|
||||||
|
|
||||||
- *k*值取值范围 1≤*k*≤100。
|
- *k* 值取值范围 1≤*k*≤100。
|
||||||
- 系统同时返回该记录关联的时间戳列。
|
- 系统同时返回该记录关联的时间戳列。
|
||||||
- 限制:BOTTOM 函数不支持 FILL 子句。
|
- 限制:BOTTOM 函数不支持 FILL 子句。
|
||||||
|
|
||||||
|
@ -1849,8 +1850,8 @@ FIRST(expr)
|
||||||
|
|
||||||
**使用说明**:
|
**使用说明**:
|
||||||
|
|
||||||
- 如果要返回各个列的首个(时间戳最小)非 NULL 值,可以使用 FIRST(\*);查询超级表,且multiResultFunctionStarReturnTags设置为 0 (默认值) 时,FIRST(\*) 只返回超级表的普通列;设置为 1 时,返回超级表的普通列和标签列。
|
- 如果要返回各个列的首个(时间戳最小)非 NULL 值,可以使用 FIRST(\*) 查询超级表,且 multiResultFunctionStarReturnTags 设置为 0 (默认值) 时,FIRST(\*) 只返回超级表的普通列;设置为 1 时,返回超级表的普通列和标签列。
|
||||||
- 如果结果集中的某列全部为 NULL 值,则该列的返回结果也是 NULL。
|
- 如果结果集中的某列全部为 NULL 值,则该列的返回结果也是 NULL;
|
||||||
- 如果结果集中所有列全部为 NULL 值,则不返回结果。
|
- 如果结果集中所有列全部为 NULL 值,则不返回结果。
|
||||||
- 对于存在复合主键的表的查询,若最小时间戳的数据有多条,则只有对应的复合主键最小的数据被返回。
|
- 对于存在复合主键的表的查询,若最小时间戳的数据有多条,则只有对应的复合主键最小的数据被返回。
|
||||||
|
|
||||||
|
@ -1877,18 +1878,18 @@ ignore_null_values: {
|
||||||
|
|
||||||
- INTERP 用于在指定时间断面获取指定列的记录值,如果该时间断面不存在符合条件的行数据,那么会根据 FILL 参数的设定进行插值。
|
- INTERP 用于在指定时间断面获取指定列的记录值,如果该时间断面不存在符合条件的行数据,那么会根据 FILL 参数的设定进行插值。
|
||||||
- INTERP 的输入数据为指定列的数据,可以通过条件语句(where 子句)来对原始列数据进行过滤,如果没有指定过滤条件则输入为全部数据。
|
- INTERP 的输入数据为指定列的数据,可以通过条件语句(where 子句)来对原始列数据进行过滤,如果没有指定过滤条件则输入为全部数据。
|
||||||
- INTERP SQL 查询需要同时与 RANGE,EVERY 和 FILL 关键字一起使用;流计算不能使用 RANGE,需要 EVERY 和 FILL 关键字一起使用。
|
- INTERP SQL 查询需要同时与 RANGE、EVERY 和 FILL 关键字一起使用;流计算不能使用 RANGE,需要 EVERY 和 FILL 关键字一起使用。
|
||||||
- INTERP 的输出时间范围根据 RANGE(timestamp1, timestamp2) 字段来指定,需满足 timestamp1 \<= timestamp2。其中 timestamp1 为输出时间范围的起始值,即如果 timestamp1 时刻符合插值条件则 timestamp1 为输出的第一条记录,timestamp2 为输出时间范围的结束值,即输出的最后一条记录的 timestamp 不能大于 timestamp2。
|
- INTERP 的输出时间范围根据 RANGE(timestamp1, timestamp2) 字段来指定,需满足 timestamp1 \<= timestamp2。其中 timestamp1 为输出时间范围的起始值,即如果 timestamp1 时刻符合插值条件则 timestamp1 为输出的第一条记录,timestamp2 为输出时间范围的结束值,即输出的最后一条记录的 timestamp 不能大于 timestamp2。
|
||||||
- INTERP 根据 EVERY(time_unit) 字段来确定输出时间范围内的结果条数,即从 timestamp1 开始每隔固定长度的时间(time_unit 值)进行插值,time_unit 可取值时间单位:1a(毫秒),1s(秒),1m(分),1h(小时),1d(天),1w(周)。例如 EVERY(500a) 将对于指定数据每500毫秒间隔进行一次插值。
|
- INTERP 根据 EVERY(time_unit) 字段来确定输出时间范围内的结果条数,即从 timestamp1 开始每隔固定长度的时间(time_unit 值)进行插值,time_unit 可取值时间单位:1a(毫秒),1s(秒),1m(分),1h(小时),1d(天),1w(周)。例如 EVERY(500a) 将对于指定数据每500毫秒间隔进行一次插值。
|
||||||
- INTERP 根据 FILL 字段来决定在每个符合输出条件的时刻如何进行插值。关于 FILL 子句如何使用请参考 [FILL 子句](../distinguished/#fill-子句)
|
- INTERP 根据 FILL 字段来决定在每个符合输出条件的时刻如何进行插值。关于 FILL 子句如何使用请参考 [FILL 子句](../distinguished/#fill-子句)
|
||||||
- INTERP 可以在 RANGE 字段中只指定唯一的时间戳对单个时间点进行插值,在这种情况下,EVERY 字段可以省略。例如 SELECT INTERP(col) FROM tb RANGE('2023-01-01 00:00:00') FILL(linear)。
|
- INTERP 可以在 RANGE 字段中只指定唯一的时间戳对单个时间点进行插值,在这种情况下,EVERY 字段可以省略。例如 SELECT INTERP(col) FROM tb RANGE('2023-01-01 00:00:00') FILL(linear)。
|
||||||
- INTERP 作用于超级表时,会将该超级表下的所有子表数据按照主键列排序后进行插值计算,也可以搭配 PARTITION BY tbname 使用,将结果强制规约到单个时间线。
|
- INTERP 作用于超级表时,会将该超级表下的所有子表数据按照主键列排序后进行插值计算,也可以搭配 PARTITION BY tbname 使用,将结果强制规约到单个时间线。
|
||||||
- INTERP 可以与伪列 _irowts 一起使用,返回插值点所对应的时间戳(3.0.2.0 版本以后支持)。
|
- INTERP 可以与伪列 _irowts 一起使用,返回插值点所对应的时间戳(v3.0.2.0 以后支持)。
|
||||||
- INTERP 可以与伪列 _isfilled 一起使用,显示返回结果是否为原始记录或插值算法产生的数据(3.0.3.0 版本以后支持)。
|
- INTERP 可以与伪列 _isfilled 一起使用,显示返回结果是否为原始记录或插值算法产生的数据(v3.0.3.0 以后支持)。
|
||||||
- INTERP 对于带复合主键的表的查询,若存在相同时间戳的数据,则只有对应的复合主键最小的数据参与运算。
|
- INTERP 对于带复合主键的表的查询,若存在相同时间戳的数据,则只有对应的复合主键最小的数据参与运算。
|
||||||
- INTERP 查询支持 NEAR FILL 模式,即当需要 FILL 时,使用距离当前时间点最近的数据进行插值,当前后时间戳与当前时间断面一样近时,FILL 前一行的值。此模式在流计算中和窗口查询中不支持。例如 SELECT INTERP(col) FROM tb RANGE('2023-01-01 00:00:00', '2023-01-01 00:10:00') FILL(NEAR)(3.3.4.9 版本及以后支持)。
|
- INTERP 查询支持 NEAR FILL 模式,即当需要 FILL 时,使用距离当前时间点最近的数据进行插值,当前后时间戳与当前时间断面一样近时,FILL 前一行的值。此模式在流计算中和窗口查询中不支持。例如 SELECT INTERP(col) FROM tb RANGE('2023-01-01 00:00:00', '2023-01-01 00:10:00') FILL(NEAR)(v3.3.4.9 及以后支持)。
|
||||||
- INTERP 只有在使用 FILL PREV/NEXT/NEAR 模式时才可以使用伪列 `_irowts_origin`。`_irowts_origin` 在 3.3.4.9 版本及以后支持。
|
- INTERP 只有在使用 FILL PREV/NEXT/NEAR 模式时才可以使用伪列 `_irowts_origin`。`_irowts_origin` 在 v3.3.4.9 以后支持。
|
||||||
- INTERP `RANGE`子句从 3.3.4.9 版本开始支持时间范围的扩展,如 `RANGE('2023-01-01 00:00:00', 10s)` 表示只能使用时间点 '2023-01-01 00:00:00' 周边 10s 内的数据进行插值,FILL PREV/NEXT/NEAR 分别表示从时间点开始向前/向后/前后在时间范围内查找数据,若时间点周边在指定时间范围内没有数据,则使用 FILL 指定的默认值进行插值,因此此时 FILL 子句必须同时指定默认值。例如 SELECT INTERP(col) FROM tb RANGE('2023-01-01 00:00:00', 10s) FILL(PREV, 1)。从 3.3.6.0 版本开始支持时间区间和时间范围的组合,对于时间区间内的每个断面进行插值时都需要满足时间范围的要求,在此之前的版本仅支持时间点和时间范围的组合。时间范围的值域规则与 EVERY 类似,单位不能是年或月,值必须大于 0,不能带引号。使用该扩展时,不支持除 FILL PREV/NEXT/NEAR 外的其他 FILL 模式。
|
- INTERP `RANGE`子句从 v3.3.4.9 开始支持时间范围的扩展,如 `RANGE('2023-01-01 00:00:00', 10s)` 表示只能使用时间点 '2023-01-01 00:00:00' 周边 10s 内的数据进行插值,FILL PREV/NEXT/NEAR 分别表示从时间点开始向前/向后/前后在时间范围内查找数据,若时间点周边在指定时间范围内没有数据,则使用 FILL 指定的默认值进行插值,因此此时 FILL 子句必须同时指定默认值。例如 SELECT INTERP(col) FROM tb RANGE('2023-01-01 00:00:00', 10s) FILL(PREV, 1)。从 v3.3.6.0 开始支持时间区间和时间范围的组合,对于时间区间内的每个断面进行插值时都需要满足时间范围的要求,在此之前的版本仅支持时间点和时间范围的组合。时间范围的值域规则与 EVERY 类似,单位不能是年或月,值必须大于 0,不能带引号。使用该扩展时,不支持除 `FILL PREV/NEXT/NEAR` 外的其他 FILL 模式。
|
||||||
|
|
||||||
### LAST
|
### LAST
|
||||||
|
|
||||||
|
@ -1947,7 +1948,7 @@ MAX(expr)
|
||||||
**适用于**:表和超级表。
|
**适用于**:表和超级表。
|
||||||
|
|
||||||
**使用说明**:
|
**使用说明**:
|
||||||
- max 函数可以接受字符串作为输入参数,当输入参数为字符串类型时,返回最大的字符串值,从 3.3.3.0 版本开始支持,之前的版本不支持字符串参数。
|
- max 函数可以接受字符串作为输入参数,当输入参数为字符串类型时,返回最大的字符串值,从 v3.3.3.0 开始支持,之前的版本不支持字符串参数。
|
||||||
|
|
||||||
### MIN
|
### MIN
|
||||||
|
|
||||||
|
@ -1964,7 +1965,7 @@ MIN(expr)
|
||||||
**适用于**:表和超级表。
|
**适用于**:表和超级表。
|
||||||
|
|
||||||
**使用说明**:
|
**使用说明**:
|
||||||
- min 函数可以接受字符串作为输入参数,当输入参数为字符串类型时,返回最大的字符串值,从 3.3.3.0 版本开始支持,之前的版本不支持字符串参数。
|
- min 函数可以接受字符串作为输入参数,当输入参数为字符串类型时,返回最大的字符串值,从 v3.3.3.0 开始支持,之前的版本不支持字符串参数。
|
||||||
|
|
||||||
### MODE
|
### MODE
|
||||||
|
|
||||||
|
@ -2031,7 +2032,7 @@ TOP(expr, k)
|
||||||
|
|
||||||
**使用说明**:
|
**使用说明**:
|
||||||
|
|
||||||
- *k* 取值范围 1≤*k*≤100。
|
- *k* 值取值范围 1≤*k*≤100。
|
||||||
- 系统同时返回该记录关联的时间戳列。
|
- 系统同时返回该记录关联的时间戳列。
|
||||||
- 限制:TOP 函数不支持 FILL 子句。
|
- 限制:TOP 函数不支持 FILL 子句。
|
||||||
|
|
||||||
|
@ -2055,7 +2056,7 @@ UNIQUE(expr)
|
||||||
COLS(func(expr), output_expr1, [, output_expr2] ... )
|
COLS(func(expr), output_expr1, [, output_expr2] ... )
|
||||||
```
|
```
|
||||||
|
|
||||||
**功能说明**:在选择函数 func(expr) 执行结果所在数据行上,执行表达式 output_expr1, [, output_expr2],返回其结果,func(expr)结果不输出。
|
**功能说明**:在选择函数 func(expr) 执行结果所在数据行上,执行表达式 output_expr1, [, output_expr2],返回其结果,func(expr) 结果不输出。
|
||||||
|
|
||||||
**返回数据类型**:返回多列数据,每列数据类型为对应表达式返回结果的类型。
|
**返回数据类型**:返回多列数据,每列数据类型为对应表达式返回结果的类型。
|
||||||
|
|
||||||
|
@ -2063,12 +2064,12 @@ COLS(func(expr), output_expr1, [, output_expr2] ... )
|
||||||
|
|
||||||
**适用于**:表和超级表。
|
**适用于**:表和超级表。
|
||||||
|
|
||||||
**使用说明:**
|
**使用说明**:
|
||||||
- func 函数类型:必须是单行选择函数(输出结果为一行的选择函数,例如 last 是单行选择函数, 但 top 是多行选择函数)。
|
- func 函数类型:必须是单行选择函数(输出结果为一行的选择函数,例如 last 是单行选择函数,但 top 是多行选择函数)。
|
||||||
- 主要用于一个 sql 中获取多个选择函数结果关联列的场景,例如: select cols(max(c0), ts), cols(max(c1), ts) from ...可用于获取 c0, c1 列最大值的不同 ts 值。
|
- 主要用于一个 sql 中获取多个选择函数结果关联列的场景,例如 `select cols(max(c0), ts), cols(max(c1), ts) from ...` 可用于获取 c0、c1 列最大值的不同 ts 值。
|
||||||
- 注意, 函数 func 的结果并没有返回,如需输出 func 结果,可额外增加输出列,如: select fist(ts), cols(first(ts), c1) from ...
|
- 注意,函数 func 的结果并没有返回,如需输出 func 结果,可额外增加输出列,如 `select fist(ts), cols(first(ts), c1) from ...`
|
||||||
- 输出只有一列时,可以对 cols 函数设置别名。例如: "select cols(first(ts), c1) as c11 from ..."
|
- 输出只有一列时,可以对 cols 函数设置别名。例如 `select cols(first(ts), c1) as c11 from ...`
|
||||||
- 输出一列或者多列时,可以对 cols 函数的每个输出列设置命名。例如: "select cols(first(ts), c1 as c11, c2 as c22)"
|
- 输出一列或者多列时,可以对 cols 函数的每个输出列设置命名。例如 `select cols(first(ts), c1 as c11, c2 as c22)`
|
||||||
|
|
||||||
|
|
||||||
## 时序数据特有函数
|
## 时序数据特有函数
|
||||||
|
@ -2083,7 +2084,7 @@ CSUM(expr)
|
||||||
|
|
||||||
**功能说明**:累加和(Cumulative sum),忽略 NULL 值。
|
**功能说明**:累加和(Cumulative sum),忽略 NULL 值。
|
||||||
|
|
||||||
**返回结果类型**:输入列如果是整数类型返回值为长整型 (int64_t),浮点数返回值为双精度浮点数(Double)。无符号整数类型返回值为无符号长整型(uint64_t)。
|
**返回结果类型**:输入列如果是整数类型返回值为长整型(bigint),浮点数返回值为双精度浮点数(double)。无符号整数类型返回值为无符号长整型(unsigned bigint)。
|
||||||
|
|
||||||
**适用数据类型**:数值类型。
|
**适用数据类型**:数值类型。
|
||||||
|
|
||||||
|
@ -2118,7 +2119,7 @@ ignore_negative: {
|
||||||
|
|
||||||
**使用说明**:
|
**使用说明**:
|
||||||
|
|
||||||
- 可以与选择相关联的列一起使用,例如 select \_rowts, DERIVATIVE(col1, 1s, 1) from tb1。
|
- 可以与选择相关联的列一起使用。例如 `select \_rowts, DERIVATIVE(col1, 1s, 1) from tb1`。
|
||||||
|
|
||||||
### DIFF
|
### DIFF
|
||||||
|
|
||||||
|
@ -2133,14 +2134,14 @@ ignore_option: {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
**功能说明**:统计表中特定列与之前行的当前列有效值之差。ignore_option 取值为 0|1|2|3,可以不填,默认值为 0。
|
**功能说明**:统计表中特定列与之前行的当前列有效值之差。ignore_option 取值为 0|1|2|3,可以不填,默认值为 0。
|
||||||
- `0` 表示不忽略(diff 结果)负值不忽略 null 值
|
- `0` 表示 diff 结果不忽略负值不忽略 null 值
|
||||||
- `1` 表示(diff 结果)负值作为 null 值
|
- `1` 表示 diff 结果的负值作为 null 值
|
||||||
- `2` 表示不忽略(diff 结果)负值但忽略 null 值
|
- `2` 表示 diff 结果不忽略负值但忽略 null 值
|
||||||
- `3` 表示忽略(diff 结果)负值且忽略 null 值
|
- `3` 表示 diff 结果忽略负值且忽略 null 值
|
||||||
- 对于存在复合主键的表的查询,若时间戳相同的数据存在多条,则只有对应的复合主键最小的数据参与运算。
|
- 对于存在复合主键的表的查询,若时间戳相同的数据存在多条,则只有对应的复合主键最小的数据参与运算。
|
||||||
|
|
||||||
**返回数据类型**:bool、时间戳及整型数值类型均返回 int64,浮点类型返回 double,若 diff 结果溢出则返回溢出后的值。
|
**返回数据类型**:bool、时间戳及整型数值类型均返回 bigint,浮点类型返回 double,若 diff 结果溢出则返回溢出后的值。
|
||||||
|
|
||||||
**适用数据类型**:数值类型、时间戳和 bool 类型。
|
**适用数据类型**:数值类型、时间戳和 bool 类型。
|
||||||
|
|
||||||
|
@ -2152,9 +2153,9 @@ ignore_option: {
|
||||||
- 数值类型 diff 结果为对应的算术差值;时间戳类型根据数据库的时间戳精度进行差值计算;bool 类型计算差值时 true 视为 1,false 视为 0。
|
- 数值类型 diff 结果为对应的算术差值;时间戳类型根据数据库的时间戳精度进行差值计算;bool 类型计算差值时 true 视为 1,false 视为 0。
|
||||||
- 如当前行数据为 null 或者没有找到同列前一个有效数据时,diff 结果为 null。
|
- 如当前行数据为 null 或者没有找到同列前一个有效数据时,diff 结果为 null。
|
||||||
- 忽略负值时(ignore_option 设置为 1 或 3 ),如果 diff 结果为负值,则结果设置为 null,然后根据 null 值过滤规则进行过滤。
|
- 忽略负值时(ignore_option 设置为 1 或 3 ),如果 diff 结果为负值,则结果设置为 null,然后根据 null 值过滤规则进行过滤。
|
||||||
- 当 diff 结果发生溢出时,结果是否是 `应该忽略的负值` 取决于逻辑运算结果是正数还是负数,例如 9223372036854775800 - (-9223372036854775806) 的值超出 BIGINT 的范围 ,diff 结果会显示溢出值 -10,但并不会被作为负值忽略。
|
- 当 diff 结果发生溢出时,结果是否是 `应该忽略的负值` 取决于逻辑运算结果是正数还是负数,例如 9223372036854775800 - (-9223372036854775806) 的值超出 BIGINT 的范围,diff 结果会显示溢出值 -10,但并不会被作为负值忽略。
|
||||||
- 单个语句中可以使用单个或者多个 diff,并且每个 diff 可以指定相同或不同的 ignore_option ,当单个语句中存在多个 diff 时当且仅当某行所有 diff 的结果都为 null ,并且 ignore_option 都设置为忽略 null 值,该行才从结果集中剔除。
|
- 单个语句中可以使用单个或者多个 diff,并且每个 diff 可以指定相同或不同的 ignore_option,当单个语句中存在多个 diff 时当且仅当某行所有 diff 的结果都为 null,并且 ignore_option 都设置为忽略 null 值,该行才从结果集中剔除。
|
||||||
- 可以选择与相关联的列一起使用。例如 select _rowts, DIFF() from。
|
- 可以选择与相关联的列一起使用。例如 `select _rowts, DIFF() from`。
|
||||||
- 当没有复合主键时,如果不同的子表有相同时间戳的数据,会提示 "Duplicate timestamps not allowed"。
|
- 当没有复合主键时,如果不同的子表有相同时间戳的数据,会提示 "Duplicate timestamps not allowed"。
|
||||||
- 当使用复合主键时,不同子表的时间戳和主键组合可能相同,使用哪一行取决于先找到哪一行,这意味着在这种情况下多次运行 diff() 的结果可能会不同。
|
- 当使用复合主键时,不同子表的时间戳和主键组合可能相同,使用哪一行取决于先找到哪一行,这意味着在这种情况下多次运行 diff() 的结果可能会不同。
|
||||||
|
|
||||||
|
@ -2218,7 +2219,7 @@ STATECOUNT(expr, oper, val)
|
||||||
|
|
||||||
**使用说明**:
|
**使用说明**:
|
||||||
|
|
||||||
- 不能和窗口操作一起使用,例如 interval/state_window/session_window。
|
- 不能和窗口操作一起使用,例如 `interval/state_window/session_window`。
|
||||||
|
|
||||||
|
|
||||||
### STATEDURATION
|
### STATEDURATION
|
||||||
|
@ -2296,7 +2297,7 @@ SELECT SERVER_VERSION();
|
||||||
SELECT SERVER_STATUS();
|
SELECT SERVER_STATUS();
|
||||||
```
|
```
|
||||||
|
|
||||||
**说明**:检测服务端是否所有 dnode 都在线,如果是则返回成功,否则返回无法建立连接的错误。如果想要查询集群的状态,推荐使用 `SHOW CLUSTER ALIVE;`,与 `SELECT SERVER_STATUS();` 不同,当集群中的部分节点不可用时,它不会返回错误,而是返回不同的状态码,详见:[SHOW CLUSTER ALIVE](https://docs.taosdata.com/reference/taos-sql/show/#show-cluster-alive)
|
**说明**:检测服务端是否所有 dnode 都在线,如果是则返回成功,否则返回无法建立连接的错误。如果想要查询集群的状态,推荐使用 `SHOW CLUSTER ALIVE` 与 `SELECT SERVER_STATUS()` 不同,当集群中的部分节点不可用时,它不会返回错误,而是返回不同的状态码,详见:[SHOW CLUSTER ALIVE](https://docs.taosdata.com/reference/taos-sql/show/#show-cluster-alive)
|
||||||
|
|
||||||
### CURRENT_USER
|
### CURRENT_USER
|
||||||
|
|
||||||
|
@ -2309,7 +2310,7 @@ SELECT CURRENT_USER();
|
||||||
|
|
||||||
## Geometry 函数
|
## Geometry 函数
|
||||||
|
|
||||||
### Geometry 输入函数:
|
### Geometry 输入函数
|
||||||
|
|
||||||
#### ST_GeomFromText
|
#### ST_GeomFromText
|
||||||
|
|
||||||
|
@ -2323,7 +2324,7 @@ ST_GeomFromText(VARCHAR WKT expr)
|
||||||
|
|
||||||
**适用数据类型**:VARCHAR。
|
**适用数据类型**:VARCHAR。
|
||||||
|
|
||||||
**适用表类型**:表和超级表。
|
**适用表类型**:标准表和超表。
|
||||||
|
|
||||||
**使用说明**:输入可以是 WKT 字符串之一,例如点(POINT)、线串(LINESTRING)、多边形(POLYGON)、多点集(MULTIPOINT)、多线串(MULTILINESTRING)、多多边形(MULTIPOLYGON)、几何集合(GEOMETRYCOLLECTION)。输出是以二进制字符串形式定义的 GEOMETRY 数据类型。
|
**使用说明**:输入可以是 WKT 字符串之一,例如点(POINT)、线串(LINESTRING)、多边形(POLYGON)、多点集(MULTIPOINT)、多线串(MULTILINESTRING)、多多边形(MULTIPOLYGON)、几何集合(GEOMETRYCOLLECTION)。输出是以二进制字符串形式定义的 GEOMETRY 数据类型。
|
||||||
|
|
||||||
|
@ -2341,7 +2342,7 @@ ST_AsText(GEOMETRY geom)
|
||||||
|
|
||||||
**适用数据类型**:GEOMETRY。
|
**适用数据类型**:GEOMETRY。
|
||||||
|
|
||||||
**适用表类型**:表和超级表。
|
**适用表类型**:标准表和超表。
|
||||||
|
|
||||||
**使用说明**:输出可以是 WKT 字符串之一,例如点(POINT)、线串(LINESTRING)、多边形(POLYGON)、多点集(MULTIPOINT)、多线串(MULTILINESTRING)、多多边形(MULTIPOLYGON)、几何集合(GEOMETRYCOLLECTION)。
|
**使用说明**:输出可以是 WKT 字符串之一,例如点(POINT)、线串(LINESTRING)、多边形(POLYGON)、多点集(MULTIPOINT)、多线串(MULTILINESTRING)、多多边形(MULTIPOLYGON)、几何集合(GEOMETRYCOLLECTION)。
|
||||||
|
|
||||||
|
@ -2359,7 +2360,7 @@ ST_Intersects(GEOMETRY geomA, GEOMETRY geomB)
|
||||||
|
|
||||||
**适用数据类型**:GEOMETRY、GEOMETRY。
|
**适用数据类型**:GEOMETRY、GEOMETRY。
|
||||||
|
|
||||||
**适用表类型**:表和超级表。
|
**适用表类型**:标准表和超表。
|
||||||
|
|
||||||
**使用说明**:如果两个几何对象有任何一个共享点,则它们相交。
|
**使用说明**:如果两个几何对象有任何一个共享点,则它们相交。
|
||||||
|
|
||||||
|
@ -2375,7 +2376,7 @@ ST_Equals(GEOMETRY geomA, GEOMETRY geomB)
|
||||||
|
|
||||||
**适用数据类型**:GEOMETRY、GEOMETRY。
|
**适用数据类型**:GEOMETRY、GEOMETRY。
|
||||||
|
|
||||||
**适用表类型**:表和超级表。
|
**适用表类型**:标准表和超表。
|
||||||
|
|
||||||
**使用说明**:"空间相等"意味着 ST_Contains(A,B) = true 和 ST_Contains(B,A) = true,并且点的顺序可能不同,但表示相同的几何结构。
|
**使用说明**:"空间相等"意味着 ST_Contains(A,B) = true 和 ST_Contains(B,A) = true,并且点的顺序可能不同,但表示相同的几何结构。
|
||||||
|
|
||||||
|
@ -2391,7 +2392,7 @@ ST_Touches(GEOMETRY geomA, GEOMETRY geomB)
|
||||||
|
|
||||||
**适用数据类型**:GEOMETRY、GEOMETRY。
|
**适用数据类型**:GEOMETRY、GEOMETRY。
|
||||||
|
|
||||||
**适用表类型**:表和超级表。
|
**适用表类型**:标准表和超表。
|
||||||
|
|
||||||
**使用说明**:A 和 B 至少有一个公共点,并且这些公共点位于至少一个边界中。对于点/点输入,关系始终为 FALSE,因为点没有边界。
|
**使用说明**:A 和 B 至少有一个公共点,并且这些公共点位于至少一个边界中。对于点/点输入,关系始终为 FALSE,因为点没有边界。
|
||||||
|
|
||||||
|
@ -2407,7 +2408,7 @@ ST_Covers(GEOMETRY geomA, GEOMETRY geomB)
|
||||||
|
|
||||||
**适用数据类型**:GEOMETRY、GEOMETRY。
|
**适用数据类型**:GEOMETRY、GEOMETRY。
|
||||||
|
|
||||||
**适用表类型**:表和超级表。
|
**适用表类型**:标准表和超表。
|
||||||
|
|
||||||
**使用说明**:A 包含 B 意味着 B 中的没有点位于 A 的外部(在外部)。
|
**使用说明**:A 包含 B 意味着 B 中的没有点位于 A 的外部(在外部)。
|
||||||
|
|
||||||
|
@ -2421,9 +2422,9 @@ ST_Contains(GEOMETRY geomA, GEOMETRY geomB)
|
||||||
|
|
||||||
**返回值类型**:BOOL。
|
**返回值类型**:BOOL。
|
||||||
|
|
||||||
**适用数据类型**:GEOMETRY,GEOMETRY。
|
**适用数据类型**:GEOMETRY、GEOMETRY。
|
||||||
|
|
||||||
**适用表类型**:表和超级表。
|
**适用表类型**:标准表和超表。
|
||||||
|
|
||||||
**使用说明**:A 包含 B 当且仅当 B 的所有点位于 A 的内部(即位于内部或边界上)(或等效地,B 的没有点位于 A 的外部),并且 A 和 B 的内部至少有一个公共点。
|
**使用说明**:A 包含 B 当且仅当 B 的所有点位于 A 的内部(即位于内部或边界上)(或等效地,B 的没有点位于 A 的外部),并且 A 和 B 的内部至少有一个公共点。
|
||||||
|
|
||||||
|
@ -2439,6 +2440,6 @@ ST_ContainsProperly(GEOMETRY geomA, GEOMETRY geomB)
|
||||||
|
|
||||||
**适用数据类型**:GEOMETRY、GEOMETRY。
|
**适用数据类型**:GEOMETRY、GEOMETRY。
|
||||||
|
|
||||||
**适用表类型**:表和超级表。
|
**适用表类型**:标准表和超表。
|
||||||
|
|
||||||
**使用说明**:B 的没有点位于 A 的边界或外部。
|
**使用说明**:B 的没有点位于 A 的边界或外部。
|
||||||
|
|
|
@ -54,9 +54,9 @@ window_clause: {
|
||||||
```
|
```
|
||||||
|
|
||||||
其中,interval_val 和 sliding_val 都表示时间段,interval_offset 表示窗口偏移量,interval_offset 必须小于 interval_val,语法上支持三种方式,举例说明如下:
|
其中,interval_val 和 sliding_val 都表示时间段,interval_offset 表示窗口偏移量,interval_offset 必须小于 interval_val,语法上支持三种方式,举例说明如下:
|
||||||
- INTERVAL(1s, 500a) SLIDING(1s), 自带时间单位的形式,其中的时间单位是单字符表示, 分别为: a (毫秒), b (纳秒), d (天), h (小时), m (分钟), n (月), s (秒), u (微秒), w (周), y (年).
|
- `INTERVAL(1s, 500a) SLIDING(1s)` 自带时间单位的形式,其中的时间单位是单字符表示,分别为: a (毫秒)、b (纳秒)、d (天)、h (小时)、m (分钟)、n (月)、s (秒)、u (微秒)、w (周)、y (年)。
|
||||||
- INTERVAL(1000, 500) SLIDING(1000), 不带时间单位的形式,将使用查询库的时间精度作为默认时间单位,当存在多个库时默认采用精度更高的库.
|
- `INTERVAL(1000, 500) SLIDING(1000)` 不带时间单位的形式,将使用查询库的时间精度作为默认时间单位,当存在多个库时默认采用精度更高的库。
|
||||||
- INTERVAL('1s', '500a') SLIDING('1s'), 自带时间单位的字符串形式,字符串内部不能有任何空格等其它字符.
|
- `INTERVAL('1s', '500a') SLIDING('1s')` 自带时间单位的字符串形式,字符串内部不能有任何空格等其它字符。
|
||||||
|
|
||||||
|
|
||||||
### 窗口子句的规则
|
### 窗口子句的规则
|
||||||
|
@ -76,19 +76,19 @@ window_clause: {
|
||||||
FILL 语句指定某一窗口区间数据缺失的情况下的填充模式。填充模式包括以下几种:
|
FILL 语句指定某一窗口区间数据缺失的情况下的填充模式。填充模式包括以下几种:
|
||||||
|
|
||||||
1. 不进行填充:NONE(默认填充模式)。
|
1. 不进行填充:NONE(默认填充模式)。
|
||||||
2. VALUE 填充:固定值填充,此时需要指定填充的数值。例如:FILL(VALUE, 1.23)。这里需要注意,最终填充的值受由相应列的类型决定,如 FILL(VALUE, 1.23),相应列为 INT 类型,则填充值为 1, 若查询列表中有多列需要 FILL, 则需要给每一个 FILL 列指定 VALUE, 如 `SELECT _wstart, min(c1), max(c1) FROM ... FILL(VALUE, 0, 0)`, 注意, SELECT 表达式中只有包含普通列时才需要指定 FILL VALUE, 如 `_wstart`, `_wstart+1a`, `now`, `1+1` 以及使用 partition by 时的 partition key (如 tbname)都不需要指定 VALUE, 如 `timediff(last(ts), _wstart)` 则需要指定VALUE。
|
2. VALUE 填充:固定值填充,此时需要指定填充的数值。例如 `FILL(VALUE, 1.23)`。这里需要注意,最终填充的值受由相应列的类型决定,如 `FILL(VALUE, 1.23)`,相应列为 INT 类型,则填充值为 1,若查询列表中有多列需要 FILL,则需要给每一个 FILL 列指定 VALUE,如 `SELECT _wstart, min(c1), max(c1) FROM ... FILL(VALUE, 0, 0)`,注意,SELECT 表达式中只有包含普通列时才需要指定 FILL VALUE,如 `_wstart`、`_wstart+1a`、`now`、`1+1` 以及使用 `partition by` 时的 `partition key` (如 tbname)都不需要指定 VALUE,如 `timediff(last(ts), _wstart)` 则需要指定 VALUE。
|
||||||
3. PREV 填充:使用前一个非 NULL 值填充数据。例如:FILL(PREV)。
|
3. PREV 填充:使用前一个非 NULL 值填充数据。例如 FILL(PREV)。
|
||||||
4. NULL 填充:使用 NULL 填充数据。例如:FILL(NULL)。
|
4. NULL 填充:使用 NULL 填充数据。例如 FILL(NULL)。
|
||||||
5. LINEAR 填充:根据前后距离最近的非 NULL 值做线性插值填充。例如:FILL(LINEAR)。
|
5. LINEAR 填充:根据前后距离最近的非 NULL 值做线性插值填充。例如 FILL(LINEAR)。
|
||||||
6. NEXT 填充:使用下一个非 NULL 值填充数据。例如:FILL(NEXT)。
|
6. NEXT 填充:使用下一个非 NULL 值填充数据。例如 FILL(NEXT)。
|
||||||
|
|
||||||
以上填充模式中,除了 NONE 模式默认不填充值之外,其他模式在查询的整个时间范围内如果没有数据 FILL 子句将被忽略,即不产生填充数据,查询结果为空。这种行为在部分模式(PREV、NEXT、LINEAR)下具有合理性,因为在这些模式下没有数据意味着无法产生填充数值。而对另外一些模式(NULL、VALUE)来说,理论上是可以产生填充数值的,至于需不需要输出填充数值,取决于应用的需求。所以为了满足这类需要强制填充数据或 NULL 的应用的需求,同时不破坏现有填充模式的行为兼容性,从 3.0.3.0 版本开始,增加了两种新的填充模式:
|
以上填充模式中,除了 NONE 模式默认不填充值之外,其他模式在查询的整个时间范围内如果没有数据 FILL 子句将被忽略,即不产生填充数据,查询结果为空。这种行为在部分模式(PREV、NEXT、LINEAR)下具有合理性,因为在这些模式下没有数据意味着无法产生填充数值。而对另外一些模式(NULL、VALUE)来说,理论上是可以产生填充数值的,至于需不需要输出填充数值,取决于应用的需求。所以为了满足这类需要强制填充数据或 NULL 的应用的需求,同时不破坏现有填充模式的行为兼容性,从 v3.0.3.0 开始,增加了两种新的填充模式:
|
||||||
|
|
||||||
7. NULL_F: 强制填充 NULL 值
|
7. NULL_F:强制填充 NULL 值
|
||||||
8. VALUE_F: 强制填充 VALUE 值
|
8. VALUE_F:强制填充 VALUE 值
|
||||||
|
|
||||||
NULL, NULL_F, VALUE, VALUE_F 这几种填充模式针对不同场景区别如下:
|
NULL、NULL_F、VALUE、 VALUE_F 这几种填充模式针对不同场景区别如下:
|
||||||
- INTERVAL 子句: NULL_F, VALUE_F 为强制填充模式;NULL, VALUE 为非强制模式。在这种模式下下各自的语义与名称相符
|
- INTERVAL 子句:NULL_F、VALUE_F 为强制填充模式;NULL、VALUE 为非强制模式。在这种模式下下各自的语义与名称相符
|
||||||
- 流计算中的 INTERVAL 子句:NULL_F 与 NULL 行为相同,均为非强制模式;VALUE_F 与 VALUE 行为相同,均为非强制模式。即流计算中的 INTERVAL 没有强制模式
|
- 流计算中的 INTERVAL 子句:NULL_F 与 NULL 行为相同,均为非强制模式;VALUE_F 与 VALUE 行为相同,均为非强制模式。即流计算中的 INTERVAL 没有强制模式
|
||||||
- INTERP 子句:NULL 与 NULL_F 行为相同,均为强制模式;VALUE 与 VALUE_F 行为相同,均为强制模式。即 INTERP 中没有非强制模式。
|
- INTERP 子句:NULL 与 NULL_F 行为相同,均为强制模式;VALUE 与 VALUE_F 行为相同,均为强制模式。即 INTERP 中没有非强制模式。
|
||||||
|
|
||||||
|
@ -104,7 +104,7 @@ NULL, NULL_F, VALUE, VALUE_F 这几种填充模式针对不同场景区别如下
|
||||||
|
|
||||||
时间窗口又可分为滑动时间窗口和翻转时间窗口。
|
时间窗口又可分为滑动时间窗口和翻转时间窗口。
|
||||||
|
|
||||||
INTERVAL 子句用于产生相等时间周期的窗口,SLIDING 用以指定窗口向前滑动的时间。每次执行的查询是一个时间窗口,时间窗口随着时间流动向前滑动。在定义连续查询的时候需要指定时间窗口(time window )大小和每次前向增量时间(forward sliding times)。如图,[t0s, t0e] ,[t1s , t1e], [t2s, t2e] 是分别是执行三次连续查询的时间窗口范围,窗口的前向滑动的时间范围 sliding time 标识 。查询过滤、聚合等操作按照每个时间窗口为独立的单位执行。当 SLIDING 与 INTERVAL 相等的时候,滑动窗口即为翻转窗口。
|
INTERVAL 子句用于产生相等时间周期的窗口,SLIDING 用以指定窗口向前滑动的时间。每次执行的查询是一个时间窗口,时间窗口随着时间流动向前滑动。在定义连续查询的时候需要指定时间窗口(time window )大小和每次前向增量时间(forward sliding times)。如图,[t0s, t0e] ,[t1s , t1e],[t2s, t2e] 是分别是执行三次连续查询的时间窗口范围,窗口的前向滑动的时间范围 sliding time 标识 。查询过滤、聚合等操作按照每个时间窗口为独立的单位执行。当 SLIDING 与 INTERVAL 相等的时候,滑动窗口即为翻转窗口。
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
@ -139,21 +139,21 @@ SELECT COUNT(*) FROM meters WHERE _rowts - voltage > 1000000;
|
||||||
- 使用 INTERVAL 语句时,除非极特殊的情况,都要求把客户端和服务端的 taos.cfg 配置文件中的 timezone 参数配置为相同的取值,以避免时间处理函数频繁进行跨时区转换而导致的严重性能影响。
|
- 使用 INTERVAL 语句时,除非极特殊的情况,都要求把客户端和服务端的 taos.cfg 配置文件中的 timezone 参数配置为相同的取值,以避免时间处理函数频繁进行跨时区转换而导致的严重性能影响。
|
||||||
- 返回的结果中时间序列严格单调递增。
|
- 返回的结果中时间序列严格单调递增。
|
||||||
- 使用 AUTO 作为窗口偏移量时,如果 WHERE 时间条件比较复杂,比如多个 AND/OR/IN 互相组合,那么 AUTO 可能不生效,这种情况可以通过手动指定窗口偏移量进行解决。
|
- 使用 AUTO 作为窗口偏移量时,如果 WHERE 时间条件比较复杂,比如多个 AND/OR/IN 互相组合,那么 AUTO 可能不生效,这种情况可以通过手动指定窗口偏移量进行解决。
|
||||||
- 使用 AUTO 作为窗口偏移量时,如果窗口宽度的单位是 d (天), n (月), w (周), y (年),比如: INTERVAL(1d, AUTO), INTERVAL(3w, AUTO),此时 TSMA 优化无法生效。如果目标表上手动创建了TSMA,语句会报错退出;这种情况下,可以显式指定 Hint SKIP_TSMA 或者不使用 AUTO 作为窗口偏移量。
|
- 使用 AUTO 作为窗口偏移量时,如果窗口宽度的单位是 d (天)、n (月)、w (周)、y (年),比如 `INTERVAL(1d, AUTO)`、`INTERVAL(3w, AUTO)`,此时 TSMA 优化无法生效。如果目标表上手动创建了 TSMA,语句会报错退出;这种情况下,可以显式指定 Hint SKIP_TSMA 或者不使用 AUTO 作为窗口偏移量。
|
||||||
|
|
||||||
### 状态窗口
|
### 状态窗口
|
||||||
|
|
||||||
使用整数(布尔值)或字符串来标识产生记录时候设备的状态量。产生的记录如果具有相同的状态量数值则归属于同一个状态窗口,数值改变后该窗口关闭。如下图所示,根据状态量确定的状态窗口分别是[2019-04-28 14:22:07,2019-04-28 14:22:10]和[2019-04-28 14:22:11,2019-04-28 14:22:12]两个。
|
使用整数(布尔值)或字符串来标识产生记录时候设备的状态量。产生的记录如果具有相同的状态量数值则归属于同一个状态窗口,数值改变后该窗口关闭。如下图所示,根据状态量确定的状态窗口分别是 [2019-04-28 14:22:07,2019-04-28 14:22:10] 和 [2019-04-28 14:22:11,2019-04-28 14:22:12] 两个。
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
使用 STATE_WINDOW 来确定状态窗口划分的列。例如:
|
使用 STATE_WINDOW 来确定状态窗口划分的列。例如
|
||||||
|
|
||||||
```
|
```
|
||||||
SELECT COUNT(*), FIRST(ts), status FROM temp_tb_1 STATE_WINDOW(status);
|
SELECT COUNT(*), FIRST(ts), status FROM temp_tb_1 STATE_WINDOW(status);
|
||||||
```
|
```
|
||||||
|
|
||||||
仅关心 status 为 2 时的状态窗口的信息。例如:
|
仅关心 status 为 2 时的状态窗口的信息。例如
|
||||||
|
|
||||||
```
|
```
|
||||||
SELECT * FROM (SELECT COUNT(*) AS cnt, FIRST(ts) AS fst, status FROM temp_tb_1 STATE_WINDOW(status)) t WHERE status = 2;
|
SELECT * FROM (SELECT COUNT(*) AS cnt, FIRST(ts) AS fst, status FROM temp_tb_1 STATE_WINDOW(status)) t WHERE status = 2;
|
||||||
|
@ -165,7 +165,7 @@ TDengine 还支持将 CASE 表达式用在状态量,可以表达某个状态
|
||||||
SELECT tbname, _wstart, CASE WHEN voltage >= 205 and voltage <= 235 THEN 1 ELSE 0 END status FROM meters PARTITION BY tbname STATE_WINDOW(CASE WHEN voltage >= 205 and voltage <= 235 THEN 1 ELSE 0 END);
|
SELECT tbname, _wstart, CASE WHEN voltage >= 205 and voltage <= 235 THEN 1 ELSE 0 END status FROM meters PARTITION BY tbname STATE_WINDOW(CASE WHEN voltage >= 205 and voltage <= 235 THEN 1 ELSE 0 END);
|
||||||
```
|
```
|
||||||
|
|
||||||
状态窗口支持使用 TRUE_FOR 参数来设定窗口的最小持续时长。如果某个状态窗口的宽度低于该设定值,则会自动舍弃,不返回任何计算结果。例如,设置最短持续时长为 3s:
|
状态窗口支持使用 TRUE_FOR 参数来设定窗口的最小持续时长。如果某个状态窗口的宽度低于该设定值,则会自动舍弃,不返回任何计算结果。例如,设置最短持续时长为 3s。
|
||||||
|
|
||||||
```
|
```
|
||||||
SELECT COUNT(*), FIRST(ts), status FROM temp_tb_1 STATE_WINDOW(status) TRUE_FOR (3s);
|
SELECT COUNT(*), FIRST(ts), status FROM temp_tb_1 STATE_WINDOW(status) TRUE_FOR (3s);
|
||||||
|
@ -173,7 +173,7 @@ SELECT COUNT(*), FIRST(ts), status FROM temp_tb_1 STATE_WINDOW(status) TRUE_FOR
|
||||||
|
|
||||||
### 会话窗口
|
### 会话窗口
|
||||||
|
|
||||||
会话窗口根据记录的时间戳主键的值来确定是否属于同一个会话。如下图所示,如果设置时间戳的连续的间隔小于等于 12 秒,则以下 6 条记录构成 2 个会话窗口,分别是:[2019-04-28 14:22:10,2019-04-28 14:22:30]和[2019-04-28 14:23:10,2019-04-28 14:23:30]。因为 2019-04-28 14:22:30 与 2019-04-28 14:23:10 之间的时间间隔是 40 秒,超过了连续时间间隔(12 秒)。
|
会话窗口根据记录的时间戳主键的值来确定是否属于同一个会话。如下图所示,如果设置时间戳的连续的间隔小于等于 12 秒,则以下 6 条记录构成 2 个会话窗口,分别是 [2019-04-28 14:22:10,2019-04-28 14:22:30] 和 [2019-04-28 14:23:10,2019-04-28 14:23:30]。因为 2019-04-28 14:22:30 与 2019-04-28 14:23:10 之间的时间间隔是 40 秒,超过了连续时间间隔(12 秒)。
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
@ -186,11 +186,11 @@ SELECT COUNT(*), FIRST(ts) FROM temp_tb_1 SESSION(ts, tol_val);
|
||||||
|
|
||||||
### 事件窗口
|
### 事件窗口
|
||||||
|
|
||||||
事件窗口根据开始条件和结束条件来划定窗口,当start_trigger_condition满足时则窗口开始,直到end_trigger_condition满足时窗口关闭。start_trigger_condition和end_trigger_condition可以是任意 TDengine 支持的条件表达式,且可以包含不同的列。
|
事件窗口根据开始条件和结束条件来划定窗口,当 start_trigger_condition 满足时则窗口开始,直到 end_trigger_condition 满足时窗口关闭。start_trigger_condition 和 end_trigger_condition 可以是任意 TDengine 支持的条件表达式,且可以包含不同的列。
|
||||||
|
|
||||||
事件窗口可以仅包含一条数据。即当一条数据同时满足start_trigger_condition和end_trigger_condition,且当前不在一个窗口内时,这条数据自己构成了一个窗口。
|
事件窗口可以仅包含一条数据。即当一条数据同时满足 start_trigger_condition 和 end_trigger_condition,且当前不在一个窗口内时,这条数据自己构成了一个窗口。
|
||||||
|
|
||||||
事件窗口无法关闭时,不构成一个窗口,不会被输出。即有数据满足start_trigger_condition,此时窗口打开,但后续数据都不能满足end_trigger_condition,这个窗口无法被关闭,这部分数据不够成一个窗口,不会被输出。
|
事件窗口无法关闭时,不构成一个窗口,不会被输出。即有数据满足 start_trigger_condition,此时窗口打开,但后续数据都不能满足 end_trigger_condition,这个窗口无法被关闭,这部分数据不够成一个窗口,不会被输出。
|
||||||
|
|
||||||
如果直接在超级表上进行事件窗口查询,TDengine 会将超级表的数据汇总成一条时间线,然后进行事件窗口的计算。
|
如果直接在超级表上进行事件窗口查询,TDengine 会将超级表的数据汇总成一条时间线,然后进行事件窗口的计算。
|
||||||
如果需要对子查询的结果集进行事件窗口查询,那么子查询的结果集需要满足按时间线输出的要求,且可以输出有效的时间戳列。
|
如果需要对子查询的结果集进行事件窗口查询,那么子查询的结果集需要满足按时间线输出的要求,且可以输出有效的时间戳列。
|
||||||
|
@ -202,7 +202,7 @@ select _wstart, _wend, count(*) from t event_window start with c1 > 0 end with c
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
事件窗口支持使用 TRUE_FOR 参数来设定窗口的最小持续时长。如果某个事件窗口的宽度低于该设定值,则会自动舍弃,不返回任何计算结果。例如,设置最短持续时长为 3s:
|
事件窗口支持使用 TRUE_FOR 参数来设定窗口的最小持续时长。如果某个事件窗口的宽度低于该设定值,则会自动舍弃,不返回任何计算结果。例如,设置最短持续时长为 3s。
|
||||||
|
|
||||||
```
|
```
|
||||||
select _wstart, _wend, count(*) from t event_window start with c1 > 0 end with c2 < 10 true_for (3s);
|
select _wstart, _wend, count(*) from t event_window start with c1 > 0 end with c2 < 10 true_for (3s);
|
||||||
|
@ -210,7 +210,7 @@ select _wstart, _wend, count(*) from t event_window start with c1 > 0 end with c
|
||||||
|
|
||||||
### 计数窗口
|
### 计数窗口
|
||||||
|
|
||||||
计数窗口按固定的数据行数来划分窗口。默认将数据按时间戳排序,再按照count_val的值,将数据划分为多个窗口,然后做聚合计算。count_val表示每个count window包含的最大数据行数,总数据行数不能整除count_val时,最后一个窗口的行数会小于count_val。sliding_val是常量,表示窗口滑动的数量,类似于 interval的SLIDING。
|
计数窗口按固定的数据行数来划分窗口。默认将数据按时间戳排序,再按照 count_val 的值,将数据划分为多个窗口,然后做聚合计算。count_val 表示每个 count window 包含的最大数据行数,总数据行数不能整除 count_val 时,最后一个窗口的行数会小于 count_val。sliding_val 是常量,表示窗口滑动的数量,类似于 interval 的 SLIDING。
|
||||||
|
|
||||||
以下面的 SQL 语句为例,计数窗口切分如图所示:
|
以下面的 SQL 语句为例,计数窗口切分如图所示:
|
||||||
```sql
|
```sql
|
||||||
|
@ -223,7 +223,7 @@ select _wstart, _wend, count(*) from t count_window(4);
|
||||||
|
|
||||||
### 时间戳伪列
|
### 时间戳伪列
|
||||||
|
|
||||||
窗口聚合查询结果中,如果 SQL 语句中没有指定输出查询结果中的时间戳列,那么最终结果中不会自动包含窗口的时间列信息。如果需要在结果中输出聚合结果所对应的时间窗口信息,需要在 SELECT 子句中使用时间戳相关的伪列: 时间窗口起始时间 (\_WSTART), 时间窗口结束时间 (\_WEND), 时间窗口持续时间 (\_WDURATION), 以及查询整体窗口相关的伪列: 查询窗口起始时间(\_QSTART) 和查询窗口结束时间(\_QEND)。需要注意的是时间窗口起始时间和结束时间均是闭区间,时间窗口持续时间是数据当前时间分辨率下的数值。例如,如果当前数据库的时间分辨率是毫秒,那么结果中 500 就表示当前时间窗口的持续时间是 500毫秒 (500 ms)。
|
窗口聚合查询结果中,如果 SQL 语句中没有指定输出查询结果中的时间戳列,那么最终结果中不会自动包含窗口的时间列信息。如果需要在结果中输出聚合结果所对应的时间窗口信息,需要在 SELECT 子句中使用时间戳相关的伪列:时间窗口起始时间 (\_WSTART),时间窗口结束时间 (\_WEND),时间窗口持续时间 (\_WDURATION),以及查询整体窗口相关的伪列:查询窗口起始时间(\_QSTART) 和查询窗口结束时间(\_QEND)。需要注意的是时间窗口起始时间和结束时间均是闭区间,时间窗口持续时间是数据当前时间分辨率下的数值。例如,如果当前数据库的时间分辨率是毫秒,那么结果中 500 就表示当前时间窗口的持续时间是 500毫秒 (500 ms)。
|
||||||
|
|
||||||
### 示例
|
### 示例
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ TDengine 3.0.0.0 开始对消息队列做了大幅的优化和增强以简化用
|
||||||
|
|
||||||
TDengine 创建 topic 的个数上限通过参数 tmqMaxTopicNum 控制,默认 20 个。
|
TDengine 创建 topic 的个数上限通过参数 tmqMaxTopicNum 控制,默认 20 个。
|
||||||
|
|
||||||
TDengine 使用 SQL 创建一个 topic,共有三种类型的 topic:
|
TDengine 使用 SQL 创建一个 topic,共有三种类型的 topic。
|
||||||
|
|
||||||
### 查询 topic
|
### 查询 topic
|
||||||
|
|
||||||
|
@ -20,12 +20,13 @@ TDengine 使用 SQL 创建一个 topic,共有三种类型的 topic:
|
||||||
CREATE TOPIC [IF NOT EXISTS] topic_name as subquery
|
CREATE TOPIC [IF NOT EXISTS] topic_name as subquery
|
||||||
```
|
```
|
||||||
|
|
||||||
通过 `SELECT` 语句订阅(包括 `SELECT *`,或 `SELECT ts, c1` 等指定查询订阅,可以带条件过滤、标量函数计算,但不支持聚合函数、不支持时间窗口聚合)。需要注意的是:
|
通过 `SELECT` 语句订阅(包括 `SELECT *` 或 `SELECT ts, c1` 等指定查询订阅,可以带条件过滤、标量函数计算,但不支持聚合函数、不支持时间窗口聚合)。需要注意的是:
|
||||||
|
|
||||||
- 该类型 TOPIC 一旦创建则订阅数据的结构确定。
|
- 该类型 TOPIC 一旦创建则订阅数据的结构确定。
|
||||||
- 被订阅或用于计算的列或标签不可被删除(`ALTER table DROP`)、修改(`ALTER table MODIFY`)。
|
- 被订阅或用于计算的列或标签不可被删除(`ALTER table DROP`)、修改(`ALTER table MODIFY`)。
|
||||||
- 若发生表结构变更,新增的列不出现在结果中。
|
- 若发生表结构变更,新增的列不出现在结果中。
|
||||||
- 对于 select \*,则订阅展开为创建时所有的列(子表、普通表为数据列,超级表为数据列加标签列)
|
- 对于 select \*,则订阅展开为创建时所有的列(子表、普通表为数据列,超级表为数据列加标签列)。
|
||||||
|
|
||||||
### 超级表 topic
|
### 超级表 topic
|
||||||
|
|
||||||
语法:
|
语法:
|
||||||
|
@ -38,8 +39,8 @@ CREATE TOPIC [IF NOT EXISTS] topic_name [with meta] AS STABLE stb_name [where_co
|
||||||
|
|
||||||
- 不会限制用户的表结构变更。
|
- 不会限制用户的表结构变更。
|
||||||
- 返回的是非结构化的数据:返回数据的结构会随之超级表的表结构变化而变化。
|
- 返回的是非结构化的数据:返回数据的结构会随之超级表的表结构变化而变化。
|
||||||
- with meta 参数可选,选择时将返回创建超级表,子表等语句,主要用于taosx做超级表迁移
|
- with meta 参数可选,选择时将返回创建超级表,子表等语句,主要用于 taosX 做超级表迁移。
|
||||||
- where_condition 参数可选,选择时将用来过滤符合条件的子表,订阅这些子表。where 条件里不能有普通列,只能是tag或tbname,where条件里可以用函数,用来过滤tag,但是不能是聚合函数,因为子表tag值无法做聚合。也可以是常量表达式,比如 2 > 1(订阅全部子表),或者 false(订阅0个子表)
|
- where_condition 参数可选,选择时将用来过滤符合条件的子表,订阅这些子表。where 条件里不能有普通列,只能是 tag 或 tbname,where 条件里可以用函数,用来过滤 tag,但是不能是聚合函数,因为子表 tag 值无法做聚合。也可以是常量表达式,比如 2 > 1(订阅全部子表),或者 false(订阅 0 个子表)
|
||||||
- 返回数据不包含标签。
|
- 返回数据不包含标签。
|
||||||
|
|
||||||
### 数据库 topic
|
### 数据库 topic
|
||||||
|
@ -52,9 +53,9 @@ CREATE TOPIC [IF NOT EXISTS] topic_name [with meta] AS DATABASE db_name;
|
||||||
|
|
||||||
通过该语句可创建一个包含数据库所有表数据的订阅
|
通过该语句可创建一个包含数据库所有表数据的订阅
|
||||||
|
|
||||||
- with meta 参数可选,选择时将返回创建数据库里所有超级表,子表的语句,主要用于taosx做数据库迁移
|
- with meta 参数可选,选择时将返回创建数据库里所有超级表,子表的语句,主要用于 taosX 做数据库迁移。
|
||||||
|
|
||||||
说明: 超级表订阅和库订阅属于高级订阅模式,容易出错,如确实要使用,请咨询专业人员。
|
说明:超级表订阅和库订阅属于高级订阅模式,容易出错,如确实要使用,请咨询 TDengine 运维团队。
|
||||||
|
|
||||||
## 删除 topic
|
## 删除 topic
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,7 @@ stream_options: {
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
其中 subquery 是 select 普通查询语法的子集:
|
其中 subquery 是 select 普通查询语法的子集。
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
subquery: SELECT select_list
|
subquery: SELECT select_list
|
||||||
|
@ -32,7 +32,7 @@ subquery: SELECT select_list
|
||||||
|
|
||||||
支持会话窗口、状态窗口、滑动窗口、事件窗口和计数窗口。其中,状态窗口、事件窗口和计数窗口搭配超级表时必须与 partition by tbname 一起使用。对于数据源表是复合主键的流,不支持状态窗口、事件窗口、计数窗口的计算。
|
支持会话窗口、状态窗口、滑动窗口、事件窗口和计数窗口。其中,状态窗口、事件窗口和计数窗口搭配超级表时必须与 partition by tbname 一起使用。对于数据源表是复合主键的流,不支持状态窗口、事件窗口、计数窗口的计算。
|
||||||
|
|
||||||
stb_name 是保存计算结果的超级表的表名,如果该超级表不存在,会自动创建;如果已存在,则检查列的schema信息。详见 [写入已存在的超级表](#写入已存在的超级表) 。
|
stb_name 是保存计算结果的超级表的表名,如果该超级表不存在,会自动创建;如果已存在,则检查列的 schema 信息。详见 [写入已存在的超级表](#写入已存在的超级表)。
|
||||||
|
|
||||||
TAGS 子句定义了流计算中创建TAG的规则,可以为每个 partition 对应的子表生成自定义的TAG值,详见 [自定义 TAG](#自定义 TAG)
|
TAGS 子句定义了流计算中创建TAG的规则,可以为每个 partition 对应的子表生成自定义的TAG值,详见 [自定义 TAG](#自定义 TAG)
|
||||||
```sql
|
```sql
|
||||||
|
@ -62,9 +62,9 @@ window_clause: {
|
||||||
|
|
||||||
- INTERVAL 是时间窗口,又可分为滑动时间窗口和翻转时间窗口。INTERVAL 子句用于指定窗口相等时间周期,SLIDING 字句用于指定窗口向前滑动的时间。当 interval_val 与 sliding_val 相等的时候,时间窗口即为翻转时间窗口,否则为滑动时间窗口,注意:sliding_val 必须小于等于 interval_val。
|
- INTERVAL 是时间窗口,又可分为滑动时间窗口和翻转时间窗口。INTERVAL 子句用于指定窗口相等时间周期,SLIDING 字句用于指定窗口向前滑动的时间。当 interval_val 与 sliding_val 相等的时候,时间窗口即为翻转时间窗口,否则为滑动时间窗口,注意:sliding_val 必须小于等于 interval_val。
|
||||||
|
|
||||||
- EVENT_WINDOW 是事件窗口,根据开始条件和结束条件来划定窗口。当 start_trigger_condition 满足时则窗口开始,直到 end_trigger_condition 满足时窗口关闭。 start_trigger_condition 和 end_trigger_condition 可以是任意 TDengine 支持的条件表达式,且可以包含不同的列。
|
- EVENT_WINDOW 是事件窗口,根据开始条件和结束条件来划定窗口。当 start_trigger_condition 满足时则窗口开始,直到 end_trigger_condition 满足时窗口关闭。start_trigger_condition 和 end_trigger_condition 可以是任意 TDengine 支持的条件表达式,且可以包含不同的列。
|
||||||
|
|
||||||
- COUNT_WINDOW 是计数窗口,按固定的数据行数来划分窗口。 count_val 是常量,是正整数,必须大于等于2,小于2147483648。 count_val 表示每个 COUNT_WINDOW 包含的最大数据行数,总数据行数不能整除 count_val 时,最后一个窗口的行数会小于 count_val 。 sliding_val 是常量,表示窗口滑动的数量,类似于 INTERVAL 的 SLIDING 。
|
- COUNT_WINDOW 是计数窗口,按固定的数据行数来划分窗口。count_val 是常量,是正整数,必须大于等于 2,小于 2147483648。count_val 表示每个 COUNT_WINDOW 包含的最大数据行数,总数据行数不能整除 count_val 时,最后一个窗口的行数会小于 count_val。sliding_val 是常量,表示窗口滑动的数量,类似于 INTERVAL 的 SLIDING。
|
||||||
|
|
||||||
窗口的定义与时序数据特色查询中的定义完全相同,详见 [TDengine 特色查询](../distinguished)
|
窗口的定义与时序数据特色查询中的定义完全相同,详见 [TDengine 特色查询](../distinguished)
|
||||||
|
|
||||||
|
@ -101,13 +101,13 @@ notification_definition 子句定义了窗口计算过程中,在窗口打开/
|
||||||
CREATE STREAM avg_vol_s INTO avg_vol SUBTABLE(CONCAT('new-', tname)) AS SELECT _wstart, count(*), avg(voltage) FROM meters PARTITION BY tbname tname INTERVAL(1m);
|
CREATE STREAM avg_vol_s INTO avg_vol SUBTABLE(CONCAT('new-', tname)) AS SELECT _wstart, count(*), avg(voltage) FROM meters PARTITION BY tbname tname INTERVAL(1m);
|
||||||
```
|
```
|
||||||
|
|
||||||
PARTITION 子句中,为 tbname 定义了一个别名 tname, 在 PARTITION 子句中的别名可以用于 SUBTABLE 子句中的表达式计算,在上述示例中,流新创建的子表将以前缀 'new-' 连接原表名作为表名(从 3.2.3.0 版本开始,为了避免 SUBTABLE 中的表达式无法区分各个子表,即误将多个相同时间线写入一个子表,在指定的子表名后面加上 _stableName_groupId)。
|
PARTITION 子句中,为 tbname 定义了一个别名 tname, 在 PARTITION 子句中的别名可以用于 SUBTABLE 子句中的表达式计算,在上述示例中,流新创建的子表将以前缀 'new-' 连接原表名作为表名(从 v3.2.3.0 开始,为了避免 SUBTABLE 中的表达式无法区分各个子表,即误将多个相同时间线写入一个子表,在指定的子表名后面加上 _stableName_groupId)。
|
||||||
|
|
||||||
注意,子表名的长度若超过 TDengine 的限制,将被截断。若要生成的子表名已经存在于另一超级表,由于 TDengine 的子表名是唯一的,因此对应新子表的创建以及数据的写入将会失败。
|
注意,子表名的长度若超过 TDengine 的限制,将被截断。若要生成的子表名已经存在于另一超级表,由于 TDengine 的子表名是唯一的,因此对应新子表的创建以及数据的写入将会失败。
|
||||||
|
|
||||||
## 流式计算读取历史数据
|
## 流式计算读取历史数据
|
||||||
|
|
||||||
正常情况下,流式计算不会处理创建前已经写入源表中的数据,若要处理已经写入的数据,可以在创建流时设置 fill_history 1 选项,这样创建的流式计算会自动处理创建前、创建中、创建后写入的数据。流计算处理历史数据的最大窗口数是 2000万,超过限制会报错。例如:
|
正常情况下,流式计算不会处理创建前已经写入源表中的数据,若要处理已经写入的数据,可以在创建流时设置 fill_history 1 选项,这样创建的流式计算会自动处理创建前、创建中、创建后写入的数据。流计算处理历史数据的最大窗口数是 2000 万,超过限制会报错。例如:
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
create stream if not exists s1 fill_history 1 into st1 as select count(*) from t1 interval(10s)
|
create stream if not exists s1 fill_history 1 into st1 as select count(*) from t1 interval(10s)
|
||||||
|
@ -151,7 +151,7 @@ SELECT * from information_schema.`ins_streams`;
|
||||||
|
|
||||||
在创建流时,可以通过 TRIGGER 指令指定流式计算的触发模式。
|
在创建流时,可以通过 TRIGGER 指令指定流式计算的触发模式。
|
||||||
|
|
||||||
对于非窗口计算,流式计算的触发是实时的;对于窗口计算,目前提供 4 种触发模式,默认为 WINDOW_CLOSE:
|
对于非窗口计算,流式计算的触发是实时的;对于窗口计算,目前提供 4 种触发模式,默认为 WINDOW_CLOSE。
|
||||||
|
|
||||||
1. AT_ONCE:写入立即触发
|
1. AT_ONCE:写入立即触发
|
||||||
|
|
||||||
|
@ -283,7 +283,7 @@ RESUME STREAM [IF EXISTS] [IGNORE UNTREATED] stream_name;
|
||||||
没有指定 IF EXISTS,如果该 stream 不存在,则报错,如果存在,则恢复流计算;指定了 IF EXISTS,如果 stream 不存在,则返回成功;如果存在,则恢复流计算。如果指定 IGNORE UNTREATED,则恢复流计算时,忽略流计算暂停期间写入的数据。
|
没有指定 IF EXISTS,如果该 stream 不存在,则报错,如果存在,则恢复流计算;指定了 IF EXISTS,如果 stream 不存在,则返回成功;如果存在,则恢复流计算。如果指定 IGNORE UNTREATED,则恢复流计算时,忽略流计算暂停期间写入的数据。
|
||||||
|
|
||||||
## 状态数据备份与同步
|
## 状态数据备份与同步
|
||||||
流计算的中间结果成为计算的状态数据,需要在流计算整个生命周期中进行持久化保存。为了确保流计算中间状态能够在集群环境下在不同的节点间可靠地同步和迁移,从 3.3.2.1 版本开始,需要在运行环境中部署 rsync 软件,还需要增加以下的步骤:
|
流计算的中间结果成为计算的状态数据,需要在流计算整个生命周期中进行持久化保存。为了确保流计算中间状态能够在集群环境下在不同的节点间可靠地同步和迁移,从 v3.3.2.1 开始,需要在运行环境中部署 rsync 软件,还需要增加以下的步骤:
|
||||||
1. 在配置文件中配置 snode 的地址(IP + 端口)和状态数据备份目录(该目录系 snode 所在的物理节点的目录)。
|
1. 在配置文件中配置 snode 的地址(IP + 端口)和状态数据备份目录(该目录系 snode 所在的物理节点的目录)。
|
||||||
2. 然后创建 snode。
|
2. 然后创建 snode。
|
||||||
完成上述两个步骤以后才能创建流。
|
完成上述两个步骤以后才能创建流。
|
||||||
|
@ -300,7 +300,7 @@ RESUME STREAM [IF EXISTS] [IGNORE UNTREATED] stream_name;
|
||||||
CREATE SNODE ON DNODE [id]
|
CREATE SNODE ON DNODE [id]
|
||||||
```
|
```
|
||||||
其中的 id 是集群中的 dnode 的序号。请注意选择的dnode,流计算的中间状态将自动在其上进行备份。
|
其中的 id 是集群中的 dnode 的序号。请注意选择的dnode,流计算的中间状态将自动在其上进行备份。
|
||||||
从 3.3.4.0 版本开始,在多副本环境中创建流会进行 snode 的**存在性检查**,要求首先创建 snode。如果 snode 不存在,无法创建流。
|
从 v3.3.4.0 开始,在多副本环境中创建流会进行 snode 的**存在性检查**,要求首先创建 snode。如果 snode 不存在,无法创建流。
|
||||||
|
|
||||||
## 流式计算的事件通知
|
## 流式计算的事件通知
|
||||||
|
|
||||||
|
|
|
@ -57,7 +57,7 @@ LIKE 条件使用通配符字符串进行匹配检查,规则如下:
|
||||||
MATCH/REGEXP 条件和 NMATCH/NOT REGEXP 条件使用正则表达式进行匹配,规则如下:
|
MATCH/REGEXP 条件和 NMATCH/NOT REGEXP 条件使用正则表达式进行匹配,规则如下:
|
||||||
|
|
||||||
- 支持符合 POSIX 规范的正则表达式,具体规范内容可参见 Regular Expressions。
|
- 支持符合 POSIX 规范的正则表达式,具体规范内容可参见 Regular Expressions。
|
||||||
- MATCH 和正则表达式匹配时, 返回 TURE. NMATCH 和正则表达式不匹配时, 返回 TRUE.
|
- MATCH 和正则表达式匹配时,返回 TURE。NMATCH 和正则表达式不匹配时,返回 TRUE.
|
||||||
- 只能针对子表名(即 tbname)、字符串类型的标签值进行正则表达式过滤,不支持普通列的过滤。
|
- 只能针对子表名(即 tbname)、字符串类型的标签值进行正则表达式过滤,不支持普通列的过滤。
|
||||||
- 正则匹配字符串长度不能超过 128 字节。可以通过参数 maxRegexStringLen 设置和调整最大允许的正则匹配字符串,该参数是客户端配置参数,需要重启客户端才能生效
|
- 正则匹配字符串长度不能超过 128 字节。可以通过参数 maxRegexStringLen 设置和调整最大允许的正则匹配字符串,该参数是客户端配置参数,需要重启客户端才能生效
|
||||||
|
|
||||||
|
@ -65,7 +65,7 @@ MATCH/REGEXP 条件和 NMATCH/NOT REGEXP 条件使用正则表达式进行匹配
|
||||||
|
|
||||||
| # | **运算符** | **支持的类型** | **说明** |
|
| # | **运算符** | **支持的类型** | **说明** |
|
||||||
| --- | :--------: | -------------- | --------------------------------------------------------------------------- |
|
| --- | :--------: | -------------- | --------------------------------------------------------------------------- |
|
||||||
| 1 | AND | BOOL | 逻辑与,如果两个条件均为 TRUE, 则返回 TRUE。如果任一为 FALSE,则返回 FALSE |
|
| 1 | AND | BOOL | 逻辑与,如果两个条件均为 TRUE,则返回 TRUE。如果任一为 FALSE,则返回 FALSE |
|
||||||
| 2 | OR | BOOL | 逻辑或,如果任一条件为 TRUE, 则返回 TRUE。如果两者都是 FALSE,则返回 FALSE |
|
| 2 | OR | BOOL | 逻辑或,如果任一条件为 TRUE,则返回 TRUE。如果两者都是 FALSE,则返回 FALSE |
|
||||||
|
|
||||||
TDengine 在计算逻辑条件时,会进行短路径优化,即对于 AND,第一个条件为 FALSE,则不再计算第二个条件,直接返回 FALSE;对于 OR,第一个条件为 TRUE,则不再计算第二个条件,直接返回 TRUE。
|
TDengine 在计算逻辑条件时,会进行短路径优化,即对于 AND,第一个条件为 FALSE,则不再计算第二个条件,直接返回 FALSE;对于 OR,第一个条件为 TRUE,则不再计算第二个条件,直接返回 TRUE。
|
||||||
|
|
|
@ -33,7 +33,7 @@ description: 对 JSON 类型如何使用的详细说明
|
||||||
|
|
||||||
## 支持的操作
|
## 支持的操作
|
||||||
|
|
||||||
1. 在 where 条件中时,支持函数 match/nmatch/between and/like/and/or/is null/is not null,不支持 in
|
1. 在 where 条件中时,支持函数 `match`、`nmatch`、`between and`、`like`、`and`、`or`、`is null`、`is not null`,不支持 `in`
|
||||||
|
|
||||||
```
|
```
|
||||||
select * from s1 where info->'k1' match 'v*';
|
select * from s1 where info->'k1' match 'v*';
|
||||||
|
@ -47,7 +47,7 @@ description: 对 JSON 类型如何使用的详细说明
|
||||||
|
|
||||||
2. 支持 json tag 放在 group by、order by、join 子句、union all 以及子查询中,比如 group by json->'key'
|
2. 支持 json tag 放在 group by、order by、join 子句、union all 以及子查询中,比如 group by json->'key'
|
||||||
|
|
||||||
3. 支持 distinct 操作.
|
3. 支持 distinct 操作
|
||||||
|
|
||||||
```
|
```
|
||||||
select distinct info->'k1' from s1
|
select distinct info->'k1' from s1
|
||||||
|
@ -69,8 +69,8 @@ description: 对 JSON 类型如何使用的详细说明
|
||||||
|
|
||||||
3. json 格式限制:
|
3. json 格式限制:
|
||||||
|
|
||||||
1. json 输入字符串可以为空("","\t"," "或 null)或 object,不能为非空的字符串,布尔型和数组。
|
1. json 输入字符串可以为空(""、"\t"、" " 或 null)或 object,不能为非空的字符串,布尔型和数组。
|
||||||
2. object 可为{},如果 object 为{},则整个 json 串记为空。key 可为"",若 key 为"",则 json 串中忽略该 k-v 对。
|
2. object 可为 {},如果 object 为 {},则整个 json 串记为空。key 可为 "",若 key 为 "",则 json 串中忽略该 k-v 对。
|
||||||
3. value 可以为数字(int/double)或字符串或 bool 或 null,暂不可以为数组。不允许嵌套。
|
3. value 可以为数字(int/double)或字符串或 bool 或 null,暂不可以为数组。不允许嵌套。
|
||||||
4. 若 json 字符串中出现两个相同的 key,则第一个生效。
|
4. 若 json 字符串中出现两个相同的 key,则第一个生效。
|
||||||
5. json 字符串里暂不支持转义。
|
5. json 字符串里暂不支持转义。
|
||||||
|
|
|
@ -21,8 +21,8 @@ description: TDengine 中使用转义字符的详细规则
|
||||||
## 转义字符使用规则
|
## 转义字符使用规则
|
||||||
|
|
||||||
1. 标识符里有转义字符(数据库名、表名、列名、别名)
|
1. 标识符里有转义字符(数据库名、表名、列名、别名)
|
||||||
1. 普通标识符: 直接提示错误的标识符,因为标识符规定必须是数字、字母和下划线,并且不能以数字开头。
|
1. 普通标识符:直接提示错误的标识符,因为标识符规定必须是数字、字母和下划线,并且不能以数字开头。
|
||||||
2. 反引号``标识符: 保持原样,不转义
|
2. 反引号 `` 标识符:保持原样,不转义
|
||||||
2. 数据里有转义字符
|
2. 数据里有转义字符
|
||||||
1. 遇到上面定义的转义字符会转义(`%`和`_`见下面说明),如果没有匹配的转义字符会忽略掉转义符`\ `(`\x`保持原样)。
|
1. 遇到上面定义的转义字符会转义(`%`和`_`见下面说明),如果没有匹配的转义字符会忽略掉转义符 `\ `(`\x`保持原样)。
|
||||||
2. 对于`%`和`_`,因为在`like`里这两个字符是通配符,所以在模式匹配`like`里用`\%`和`\_`表示字符里本身的`%`和`_`,如果在`like`模式匹配上下文之外使用`\%`或`\_`,则它们的计算结果为字符串`\%`和`\_`,而不是`%`和`_`。
|
2. 对于 `%` 和 `_`,因为在 `like` 里这两个字符是通配符,所以在模式匹配 `like` 里用 `\%` 和 `\_` 表示字符里本身的 `%` 和 `_`,如果在 `like` 模式匹配上下文之外使用 `\%` 或 `\_`,则它们的计算结果为字符串 `\%` 和 `\_`,而不是 `%` 和 `_`。
|
||||||
|
|
|
@ -9,13 +9,13 @@ description: 合法字符集和命名中的限制规则
|
||||||
1. 合法字符:英文字符、数字和下划线。
|
1. 合法字符:英文字符、数字和下划线。
|
||||||
1. 允许英文字符或下划线开头,不允许以数字开头。
|
1. 允许英文字符或下划线开头,不允许以数字开头。
|
||||||
1. 不区分大小写。
|
1. 不区分大小写。
|
||||||
1. 不能是[保留关键字](./20-keywords.md)。
|
1. 不能是 [保留关键字](./20-keywords.md)。
|
||||||
1. 转义后表(列)名规则:
|
1. 转义后表(列)名规则:
|
||||||
为了兼容支持更多形式的表(列)名,TDengine 引入新的转义符 "`"。使用转义字符以后:
|
为了兼容支持更多形式的表(列)名,TDengine 引入新的转义符 "`"。使用转义字符以后:
|
||||||
- 不再对转义字符中的内容进行大小写统一,即可以保留用户指定表名中的大小写属性,例如:\`aBc\` 和 \`abc\` 是不同的表(列)名,但是 abc 和 aBc 是相同的表(列)名。
|
- 不再对转义字符中的内容进行大小写统一,即可以保留用户指定表名中的大小写属性,例如 \`aBc\` 和 \`abc\` 是不同的表(列)名,但是 abc 和 aBc 是相同的表(列)名。
|
||||||
- 可以创建包含字母、数字和下划线以外字符的表(列)名,例如:\`abc@TD\`,但是转义后名称中仍然不能包含`.`,否则会提示`The table name cannot contain '.'`。
|
- 可以创建包含字母、数字和下划线以外字符的表(列)名,例如:\`abc@TD\`,但是转义后名称中仍然不能包含`.`,否则会提示`The table name cannot contain '.'`。
|
||||||
- 可以创建以数字开头的表(列)名,例如\`1970\`。
|
- 可以创建以数字开头的表(列)名,例如 \`1970\`。
|
||||||
- 可以创建以[保留关键字](./20-keywords.md)命名的表(列)名,例如\`select\`。
|
- 可以创建以 [保留关键字](./20-keywords.md) 命名的表(列)名,例如 \`select\`。
|
||||||
|
|
||||||
## 密码合法字符集
|
## 密码合法字符集
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ description: 合法字符集和命名中的限制规则
|
||||||
|
|
||||||
- 数据库名最大长度为 64 字节
|
- 数据库名最大长度为 64 字节
|
||||||
- 表名最大长度为 192 字节,不包括数据库名前缀和分隔符
|
- 表名最大长度为 192 字节,不包括数据库名前缀和分隔符
|
||||||
- 每行数据最大长度 48KB(从 3.0.5.0 版本开始为 64KB) (注意:数据行内每个 BINARY/NCHAR 类型的列还会额外占用 2 个字节的存储位置)
|
- 每行数据最大长度 48KB(从 v3.0.5.0 开始为 64KB)(注意:数据行内每个 BINARY/NCHAR 类型的列还会额外占用 2 个字节的存储位置)
|
||||||
- 列名最大长度为 64 字节
|
- 列名最大长度为 64 字节
|
||||||
- 最多允许 4096 列,最少需要 2 列,第一列必须是时间戳。
|
- 最多允许 4096 列,最少需要 2 列,第一列必须是时间戳。
|
||||||
- 标签名最大长度为 64 字节
|
- 标签名最大长度为 64 字节
|
||||||
|
@ -37,6 +37,6 @@ description: 合法字符集和命名中的限制规则
|
||||||
- 库的数目,超级表的数目、表的数目,系统不做限制,仅受系统资源限制
|
- 库的数目,超级表的数目、表的数目,系统不做限制,仅受系统资源限制
|
||||||
- 数据库的副本数只能设置为 1 或 3
|
- 数据库的副本数只能设置为 1 或 3
|
||||||
- 用户名的最大长度是 23 字节
|
- 用户名的最大长度是 23 字节
|
||||||
- 用户密码的长度范围是 8-16 字节
|
- 用户密码的长度范围是 8-255 字节
|
||||||
- 总数据行数取决于可用资源
|
- 总数据行数取决于可用资源
|
||||||
- 单个数据库的虚拟结点数上限为 1024
|
- 单个数据库的虚拟结点数上限为 1024
|
||||||
|
|
|
@ -23,11 +23,11 @@ description: TDengine 保留关键字的详细列表
|
||||||
| ALIVE | |
|
| ALIVE | |
|
||||||
| ALL | |
|
| ALL | |
|
||||||
| ALTER | |
|
| ALTER | |
|
||||||
| ANALYZE | 3.3.4.3 及后续版本 |
|
| ANALYZE | 3.3.4.3+ |
|
||||||
| AND | |
|
| AND | |
|
||||||
| ANODE | 3.3.4.3 及后续版本 |
|
| ANODE | 3.3.4.3+ |
|
||||||
| ANODES | 3.3.4.3 及后续版本 |
|
| ANODES | 3.3.4.3+ |
|
||||||
| ANOMALY_WINDOW | 3.3.4.3 及后续版本 |
|
| ANOMALY_WINDOW | 3.3.4.3+ |
|
||||||
| ANTI | |
|
| ANTI | |
|
||||||
| APPS | |
|
| APPS | |
|
||||||
| ARBGROUPS | |
|
| ARBGROUPS | |
|
||||||
|
@ -37,7 +37,8 @@ description: TDengine 保留关键字的详细列表
|
||||||
| ASOF | |
|
| ASOF | |
|
||||||
| AT_ONCE | |
|
| AT_ONCE | |
|
||||||
| ATTACH | |
|
| ATTACH | |
|
||||||
| AUTO | 3.3.5.0 及后续版本 |
|
| AUTO | 3.3.5.0+ |
|
||||||
|
| ASSIGN | 3.3.6.0+ |
|
||||||
|
|
||||||
### B
|
### B
|
||||||
|关键字|说明|
|
|关键字|说明|
|
||||||
|
@ -77,16 +78,16 @@ description: TDengine 保留关键字的详细列表
|
||||||
| CLIENT_VERSION | |
|
| CLIENT_VERSION | |
|
||||||
| CLUSTER | |
|
| CLUSTER | |
|
||||||
| COLON | |
|
| COLON | |
|
||||||
| COLS | |
|
| COLS | 3.3.6.0+ |
|
||||||
| COLUMN | |
|
| COLUMN | |
|
||||||
| COMMA | |
|
| COMMA | |
|
||||||
| COMMENT | |
|
| COMMENT | |
|
||||||
| COMP | |
|
| COMP | |
|
||||||
| COMPACT | |
|
| COMPACT | |
|
||||||
| COMPACTS | |
|
| COMPACTS | |
|
||||||
| COMPACT_INTERVAL | 3.3.5.0 及后续版本 |
|
| COMPACT_INTERVAL | 3.3.5.0+ |
|
||||||
| COMPACT_TIME_OFFSET | 3.3.5.0 及后续版本 |
|
| COMPACT_TIME_OFFSET | 3.3.5.0+ |
|
||||||
| COMPACT_TIME_RANGE | 3.3.5.0 及后续版本 |
|
| COMPACT_TIME_RANGE | 3.3.5.0+ |
|
||||||
| CONCAT | |
|
| CONCAT | |
|
||||||
| CONFLICT | |
|
| CONFLICT | |
|
||||||
| CONNECTION | |
|
| CONNECTION | |
|
||||||
|
@ -116,7 +117,7 @@ description: TDengine 保留关键字的详细列表
|
||||||
| DESC | |
|
| DESC | |
|
||||||
| DESCRIBE | |
|
| DESCRIBE | |
|
||||||
| DETACH | |
|
| DETACH | |
|
||||||
| DISK_INFO | 3.3.5.0 及后续版本 |
|
| DISK_INFO | 3.3.5.0+ |
|
||||||
| DISTINCT | |
|
| DISTINCT | |
|
||||||
| DISTRIBUTED | |
|
| DISTRIBUTED | |
|
||||||
| DIVIDE | |
|
| DIVIDE | |
|
||||||
|
@ -149,19 +150,19 @@ description: TDengine 保留关键字的详细列表
|
||||||
|关键字|说明|
|
|关键字|说明|
|
||||||
|----------------------|-|
|
|----------------------|-|
|
||||||
| FAIL | |
|
| FAIL | |
|
||||||
| FHIGH | 3.3.4.3 及后续版本 |
|
| FHIGH | 3.3.4.3+ |
|
||||||
| FILE | |
|
| FILE | |
|
||||||
| FILL | |
|
| FILL | |
|
||||||
| FILL_HISTORY | |
|
| FILL_HISTORY | |
|
||||||
| FIRST | |
|
| FIRST | |
|
||||||
| FLOAT | |
|
| FLOAT | |
|
||||||
| FLOW | 3.3.4.3 及后续版本 |
|
| FLOW | 3.3.4.3+ |
|
||||||
| FLUSH | |
|
| FLUSH | |
|
||||||
| FOR | |
|
| FOR | |
|
||||||
| FORCE | |
|
| FORCE | |
|
||||||
| FORCE_WINDOW_CLOSE | 3.3.4.3 及后续版本 |
|
| FORCE_WINDOW_CLOSE | 3.3.4.3+ |
|
||||||
| FROM | |
|
| FROM | |
|
||||||
| FROWTS | 3.3.4.3 及后续版本 |
|
| FROWTS | 3.3.4.3+ |
|
||||||
| FULL | |
|
| FULL | |
|
||||||
| FUNCTION | |
|
| FUNCTION | |
|
||||||
| FUNCTIONS | |
|
| FUNCTIONS | |
|
||||||
|
@ -207,7 +208,7 @@ description: TDengine 保留关键字的详细列表
|
||||||
| INTO | |
|
| INTO | |
|
||||||
| IPTOKEN | |
|
| IPTOKEN | |
|
||||||
| IROWTS | |
|
| IROWTS | |
|
||||||
| IROWTS_ORIGIN | 3.3.5.0 及后续版本 |
|
| IROWTS_ORIGIN | 3.3.5.0+ |
|
||||||
| IS | |
|
| IS | |
|
||||||
| IS_IMPORT | |
|
| IS_IMPORT | |
|
||||||
| ISFILLED | |
|
| ISFILLED | |
|
||||||
|
@ -259,6 +260,7 @@ description: TDengine 保留关键字的详细列表
|
||||||
| MEDIUMBLOB | |
|
| MEDIUMBLOB | |
|
||||||
| MERGE | |
|
| MERGE | |
|
||||||
| META | |
|
| META | |
|
||||||
|
| META_ONLY | 3.3.6.0+ |
|
||||||
| MINROWS | |
|
| MINROWS | |
|
||||||
| MINUS | |
|
| MINUS | |
|
||||||
| MNODE | |
|
| MNODE | |
|
||||||
|
@ -276,8 +278,8 @@ description: TDengine 保留关键字的详细列表
|
||||||
| NONE | |
|
| NONE | |
|
||||||
| NORMAL | |
|
| NORMAL | |
|
||||||
| NOT | |
|
| NOT | |
|
||||||
| NOTIFY | 3.3.6.0 及后续版本 |
|
| NOTIFY | 3.3.6.0+ |
|
||||||
| NOTIFY_HISTORY | 3.3.6.0 及后续版本 |
|
| NOTIFY_HISTORY | 3.3.6.0+ |
|
||||||
| NOTNULL | |
|
| NOTNULL | |
|
||||||
| NOW | |
|
| NOW | |
|
||||||
| NULL | |
|
| NULL | |
|
||||||
|
@ -291,7 +293,7 @@ description: TDengine 保留关键字的详细列表
|
||||||
| OFFSET | |
|
| OFFSET | |
|
||||||
| ON | |
|
| ON | |
|
||||||
| ONLY | |
|
| ONLY | |
|
||||||
| ON_FAILURE | 3.3.6.0 及后续版本 |
|
| ON_FAILURE | 3.3.6.0+ |
|
||||||
| OR | |
|
| OR | |
|
||||||
| ORDER | |
|
| ORDER | |
|
||||||
| OUTER | |
|
| OUTER | |
|
||||||
|
@ -339,7 +341,7 @@ description: TDengine 保留关键字的详细列表
|
||||||
| RATIO | |
|
| RATIO | |
|
||||||
| READ | |
|
| READ | |
|
||||||
| RECURSIVE | |
|
| RECURSIVE | |
|
||||||
| REGEXP | 3.3.6.0 及后续版本 |
|
| REGEXP | 3.3.6.0+ |
|
||||||
| REDISTRIBUTE | |
|
| REDISTRIBUTE | |
|
||||||
| REM | |
|
| REM | |
|
||||||
| REPLACE | |
|
| REPLACE | |
|
||||||
|
@ -428,7 +430,7 @@ description: TDengine 保留关键字的详细列表
|
||||||
| TRANSACTIONS | |
|
| TRANSACTIONS | |
|
||||||
| TRIGGER | |
|
| TRIGGER | |
|
||||||
| TRIM | |
|
| TRIM | |
|
||||||
| TRUE_FOR | |
|
| TRUE_FOR | 3.3.6.0+ |
|
||||||
| TSDB_PAGESIZE | |
|
| TSDB_PAGESIZE | |
|
||||||
| TSERIES | |
|
| TSERIES | |
|
||||||
| TSMA | |
|
| TSMA | |
|
||||||
|
|
|
@ -32,9 +32,9 @@ DROP DNODE dnode_id [force] [unsafe]
|
||||||
|
|
||||||
注意删除 dnode 不等于停止相应的进程。实际中推荐先将一个 dnode 删除之后再停止其所对应的进程。
|
注意删除 dnode 不等于停止相应的进程。实际中推荐先将一个 dnode 删除之后再停止其所对应的进程。
|
||||||
|
|
||||||
只有在线节点可以被删除。如果要强制删除离线节点,需要执行强制删除操作, 即指定force选项。
|
只有在线节点可以被删除。如果要强制删除离线节点,需要执行强制删除操作, 即指定 force 选项。
|
||||||
|
|
||||||
当节点上存在单副本,并且节点处于离线,如果要强制删除该节点,需要执行非安全删除,即制定unsafe,并且数据不可再恢复。
|
当节点上存在单副本,并且节点处于离线,如果要强制删除该节点,需要执行非安全删除,即制定 unsafe,并且数据不可再恢复。
|
||||||
|
|
||||||
## 修改数据节点配置
|
## 修改数据节点配置
|
||||||
|
|
||||||
|
@ -44,27 +44,27 @@ ALTER DNODE dnode_id dnode_option
|
||||||
ALTER ALL DNODES dnode_option
|
ALTER ALL DNODES dnode_option
|
||||||
```
|
```
|
||||||
|
|
||||||
对于支持动态修改的配置参数,您可以使用 ALTER DNODE 或 ALTER ALL DNODES 语法修改 dnode 中配置参数的值,自 3.3.4.0 后,修改的配置参数将自动持久化,即便数据库服务重启后仍然生效。
|
对于支持动态修改的配置参数,您可以使用 ALTER DNODE 或 ALTER ALL DNODES 语法修改 dnode 中配置参数的值,自 v3.3.4.0 后,修改的配置参数将自动持久化,即便数据库服务重启后仍然生效。
|
||||||
|
|
||||||
对于一个配置参数是否支持动态修改,请您参考以下页面:[taosd 参考手册](../01-components/01-taosd.md)
|
对于一个配置参数是否支持动态修改,请您参考 [taosd 参考手册](../01-components/01-taosd.md)
|
||||||
|
|
||||||
value 是参数的值,需要是字符格式。如修改 dnode 1 的日志输出级别为 debug:
|
value 是参数的值,需要是字符格式。如修改 dnode 1 的日志输出级别为 debug。
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
ALTER DNODE 1 'debugFlag' '143';
|
ALTER DNODE 1 'debugFlag' '143';
|
||||||
```
|
```
|
||||||
|
|
||||||
### 补充说明:
|
### 补充说明:
|
||||||
配置参数在 dnode 中被分为全局配置参数与局部配置参数,您可以查看 SHOW VARIABLES 或 SHOW DNODE dnode_id VARIABLE 中的 category 字段来确认配置参数属于全局配置参数还是局部配置参数:
|
配置参数在 dnode 中被分为全局配置参数与局部配置参数,您可以查看 SHOW VARIABLES 或 SHOW DNODE dnode_id VARIABLE 中的 category 字段来确认配置参数属于全局配置参数还是局部配置参数。
|
||||||
1. 局部配置参数:您可以使用 ALTER DNODE 或 ALTER ALL DNODES 来更新某一个 dnode 或全部 dnodes 的局部配置参数。
|
1. 局部配置参数:您可以使用 ALTER DNODE 或 ALTER ALL DNODES 来更新某一个 dnode 或全部 dnodes 的局部配置参数。
|
||||||
2. 全局配置参数:全局配置参数要求各个 dnode 保持一致,所以您只可以使用 ALTER ALL DNODES 来更新全部 dnodes 的全局配置参数。
|
2. 全局配置参数:全局配置参数要求各个 dnode 保持一致,所以您只可以使用 ALTER ALL DNODES 来更新全部 dnodes 的全局配置参数。
|
||||||
|
|
||||||
配置参数是否可以动态修改,有以下三种情况:
|
配置参数是否可以动态修改,有以下三种情况:
|
||||||
1. 支持动态修改 立即生效
|
1. 支持动态修改,立即生效
|
||||||
2. 支持动态修改 重启生效
|
2. 支持动态修改,重启生效
|
||||||
3. 不支持动态修改
|
3. 不支持动态修改
|
||||||
|
|
||||||
对于重启后生效的配置参数,您可以通过 SHOW VARIABLES 或 SHOW DNODE dnode_id VARIABLE 看到修改后的值,但是需要重启数据库服务才使其生效。
|
对于重启后生效的配置参数,您可以通过 `SHOW VARIABLES` 或 `SHOW DNODE dnode_id VARIABLE` 看到修改后的值,但是需要重启数据库服务才使其生效。
|
||||||
|
|
||||||
## 添加管理节点
|
## 添加管理节点
|
||||||
|
|
||||||
|
@ -96,7 +96,7 @@ DROP MNODE ON DNODE dnode_id;
|
||||||
CREATE QNODE ON DNODE dnode_id;
|
CREATE QNODE ON DNODE dnode_id;
|
||||||
```
|
```
|
||||||
|
|
||||||
系统启动默认没有 QNODE,用户可以创建 QNODE 来实现计算和存储的分离。一个 DNODE 上只能创建一个 QNODE。一个 DNODE 的 `supportVnodes` 参数如果不为 0,同时又在其上创建上 QNODE,则在该 dnode 中既有负责存储管理的 vnode 又有负责查询计算的 qnode,如果还在该 dnode 上创建了 mnode,则一个 dnode 上最多三种逻辑节点都可以存在。但通过配置也可以使其彻底分离。将一个 dnode 的`supportVnodes`配置为 0,可以选择在其上创建 mnode 或者 qnode 中的一种,这样可以实现三种逻辑节点在物理上的彻底分离。
|
系统启动默认没有 QNODE,用户可以创建 QNODE 来实现计算和存储的分离。一个 dnode 上只能创建一个 QNODE。一个 dnode 的 `supportVnodes` 参数如果不为 0,同时又在其上创建上 QNODE,则在该 dnode 中既有负责存储管理的 vnode 又有负责查询计算的 qnode,如果还在该 dnode 上创建了 mnode,则一个 dnode 上最多三种逻辑节点都可以存在。但通过配置也可以使其彻底分离。将一个 dnode 的`supportVnodes`配置为 0,可以选择在其上创建 mnode 或者 qnode 中的一种,这样可以实现三种逻辑节点在物理上的彻底分离。
|
||||||
|
|
||||||
## 查看查询节点
|
## 查看查询节点
|
||||||
|
|
||||||
|
@ -104,7 +104,7 @@ CREATE QNODE ON DNODE dnode_id;
|
||||||
SHOW QNODES;
|
SHOW QNODES;
|
||||||
```
|
```
|
||||||
|
|
||||||
列出集群中所有查询节点,包括 ID,及所在 DNODE。
|
列出集群中所有查询节点,包括 ID,及所在 dnode
|
||||||
|
|
||||||
## 删除查询节点
|
## 删除查询节点
|
||||||
|
|
||||||
|
@ -112,7 +112,7 @@ SHOW QNODES;
|
||||||
DROP QNODE ON DNODE dnode_id;
|
DROP QNODE ON DNODE dnode_id;
|
||||||
```
|
```
|
||||||
|
|
||||||
删除 ID 为 dnode_id 的 DNODE 上的 QNODE,但并不会影响该 dnode 的状态。
|
删除 ID 为 dnode_id 的 dnode 上的 qnode,但并不会影响该 dnode 的状态。
|
||||||
|
|
||||||
## 查询集群状态
|
## 查询集群状态
|
||||||
|
|
||||||
|
@ -120,7 +120,10 @@ DROP QNODE ON DNODE dnode_id;
|
||||||
SHOW CLUSTER ALIVE;
|
SHOW CLUSTER ALIVE;
|
||||||
```
|
```
|
||||||
|
|
||||||
查询当前集群的状态是否可用,返回值: 0:不可用 1:完全可用 2:部分可用(集群中部分节点下线,但其它节点仍可以正常使用)
|
查询当前集群的状态是否可用,返回值
|
||||||
|
- 0:不可用
|
||||||
|
- 1:完全可用
|
||||||
|
- 2:部分可用(集群中部分节点下线,但其它节点仍可以正常使用)
|
||||||
|
|
||||||
## 修改客户端配置
|
## 修改客户端配置
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ title: 元数据
|
||||||
description: Information_Schema 数据库中存储了系统中所有的元数据信息
|
description: Information_Schema 数据库中存储了系统中所有的元数据信息
|
||||||
---
|
---
|
||||||
|
|
||||||
TDengine 内置了一个名为 `INFORMATION_SCHEMA` 的数据库,提供对数据库元数据、数据库系统信息和状态的访问,例如数据库或表的名称,当前执行的 SQL 语句等。该数据库存储有关 TDengine 维护的所有其他数据库的信息。它包含多个只读表。实际上,这些表都是视图,而不是基表,因此没有与它们关联的文件。所以对这些表只能查询,不能进行 INSERT 等写入操作。`INFORMATION_SCHEMA` 数据库旨在以一种更一致的方式来提供对 TDengine 支持的各种 SHOW 语句(如 SHOW TABLES、SHOW DATABASES)所提供的信息的访问。与 SHOW 语句相比,使用 SELECT ... FROM INFORMATION_SCHEMA.tablename 具有以下优点:
|
TDengine 内置了一个名为 `INFORMATION_SCHEMA` 的数据库,提供对数据库元数据、数据库系统信息和状态的访问,例如数据库或表的名称,当前执行的 SQL 语句等。该数据库存储有关 TDengine 维护的所有其他数据库的信息。它包含多个只读表。实际上,这些表都是视图,而不是基表,因此没有与它们关联的文件。所以对这些表只能查询,不能进行 INSERT 等写入操作。`INFORMATION_SCHEMA` 数据库旨在以一种更一致的方式来提供对 TDengine 支持的各种 SHOW 语句(如 SHOW TABLES、SHOW DATABASES)所提供的信息的访问。与 SHOW 语句相比,使用 `SELECT ... FROM INFORMATION_SCHEMA.tablename` 具有以下优点。
|
||||||
|
|
||||||
1. 可以使用 USE 语句将 INFORMATION_SCHEMA 设为默认数据库
|
1. 可以使用 USE 语句将 INFORMATION_SCHEMA 设为默认数据库
|
||||||
2. 可以使用 SELECT 语句熟悉的语法,只需要学习一些表名和列名
|
2. 可以使用 SELECT 语句熟悉的语法,只需要学习一些表名和列名
|
||||||
|
@ -15,7 +15,7 @@ TDengine 内置了一个名为 `INFORMATION_SCHEMA` 的数据库,提供对数
|
||||||
:::info
|
:::info
|
||||||
|
|
||||||
- 由于 SHOW 语句已经被开发者熟悉和广泛使用,所以它们仍然被保留。
|
- 由于 SHOW 语句已经被开发者熟悉和广泛使用,所以它们仍然被保留。
|
||||||
- 系统表中的一些列可能是关键字,在查询时需要使用转义符'\`',例如查询数据库 test 有几个 VGROUP:
|
- 系统表中的一些列可能是关键字,在查询时需要使用转义符 '\`',例如查询数据库 test 有几个 VGROUP。
|
||||||
```sql
|
```sql
|
||||||
select `vgroups` from ins_databases where name = 'test';
|
select `vgroups` from ins_databases where name = 'test';
|
||||||
```
|
```
|
||||||
|
@ -26,11 +26,11 @@ TDengine 内置了一个名为 `INFORMATION_SCHEMA` 的数据库,提供对数
|
||||||
|
|
||||||
## INS_DNODES
|
## INS_DNODES
|
||||||
|
|
||||||
提供 dnode 的相关信息。也可以使用 SHOW DNODES 来查询这些信息。 SYSINFO 为 0 的用户不能查看此表。
|
提供 dnode 的相关信息。也可以使用 SHOW DNODES 来查询这些信息。SYSINFO 为 0 的用户不能查看此表。
|
||||||
|
|
||||||
| # | **列名** | **数据类型** | **说明** |
|
| # | **列名** | **数据类型** | **说明** |
|
||||||
| --- | :------------: | ------------ | ----------------------------------------------------------------------------------------------------- |
|
| --- | :------------: | ------------ | ----------------------------------------------------------------------------------------------------- |
|
||||||
| 1 | vnodes | SMALLINT | dnode 中的实际 vnode 个数。需要注意,`vnodes` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
| 1 | vnodes | SMALLINT | dnode 中的实际 vnode 个数。需要注意,`vnodes` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。|
|
||||||
| 2 | support_vnodes | SMALLINT | 最多支持的 vnode 个数 |
|
| 2 | support_vnodes | SMALLINT | 最多支持的 vnode 个数 |
|
||||||
| 3 | status | BINARY(10) | 当前状态 |
|
| 3 | status | BINARY(10) | 当前状态 |
|
||||||
| 4 | note | BINARY(256) | 离线原因等信息 |
|
| 4 | note | BINARY(256) | 离线原因等信息 |
|
||||||
|
@ -40,7 +40,7 @@ TDengine 内置了一个名为 `INFORMATION_SCHEMA` 的数据库,提供对数
|
||||||
|
|
||||||
## INS_MNODES
|
## INS_MNODES
|
||||||
|
|
||||||
提供 mnode 的相关信息。也可以使用 SHOW MNODES 来查询这些信息。 SYSINFO 为 0 的用户不能查看此表。
|
提供 mnode 的相关信息。也可以使用 SHOW MNODES 来查询这些信息。SYSINFO 为 0 的用户不能查看此表。
|
||||||
|
|
||||||
| # | **列名** | **数据类型** | **说明** |
|
| # | **列名** | **数据类型** | **说明** |
|
||||||
| --- | :---------: | ------------ | ------------------ |
|
| --- | :---------: | ------------ | ------------------ |
|
||||||
|
@ -73,7 +73,7 @@ TDengine 内置了一个名为 `INFORMATION_SCHEMA` 的数据库,提供对数
|
||||||
|
|
||||||
## INS_CLUSTER
|
## INS_CLUSTER
|
||||||
|
|
||||||
存储集群相关信息。 SYSINFO 属性为 0 的用户不能查看此表。
|
存储集群相关信息。SYSINFO 属性为 0 的用户不能查看此表。
|
||||||
|
|
||||||
| # | **列名** | **数据类型** | **说明** |
|
| # | **列名** | **数据类型** | **说明** |
|
||||||
| --- | :---------: | ------------ | ---------- |
|
| --- | :---------: | ------------ | ---------- |
|
||||||
|
@ -90,31 +90,31 @@ TDengine 内置了一个名为 `INFORMATION_SCHEMA` 的数据库,提供对数
|
||||||
| 1 | name | VARCHAR(64) | 数据库名 |
|
| 1 | name | VARCHAR(64) | 数据库名 |
|
||||||
| 2 | create_time | TIMESTAMP | 创建时间 |
|
| 2 | create_time | TIMESTAMP | 创建时间 |
|
||||||
| 3 | ntables | INT | 数据库中表的数量,包含子表和普通表但不包含超级表 |
|
| 3 | ntables | INT | 数据库中表的数量,包含子表和普通表但不包含超级表 |
|
||||||
| 4 | vgroups | INT | 数据库中有多少个 vgroup。需要注意,`vgroups` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
| 4 | vgroups | INT | 数据库中有多少个 vgroup。需要注意,`vgroups` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
||||||
| 6 | replica | INT | 副本数。需要注意,`replica` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
| 6 | replica | INT | 副本数。需要注意,`replica` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
||||||
| 7 | strict | VARCHAR(4) | 废弃参数 |
|
| 7 | strict | VARCHAR(4) | 废弃参数 |
|
||||||
| 8 | duration | VARCHAR(10) | 单文件存储数据的时间跨度。需要注意,`duration` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。内部存储单位为分钟,查询时有可能转换为天或小时展示 |
|
| 8 | duration | VARCHAR(10) | 单文件存储数据的时间跨度。需要注意,`duration` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。内部存储单位为分钟,查询时有可能转换为天或小时展示 |
|
||||||
| 9 | keep | VARCHAR(32) | 数据保留时长。需要注意,`keep` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 内部存储单位为分钟,查询时有可能转换为天或小时展示 |
|
| 9 | keep | VARCHAR(32) | 数据保留时长。需要注意,`keep` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 内部存储单位为分钟,查询时有可能转换为天或小时展示 |
|
||||||
| 10 | buffer | INT | 每个 vnode 写缓存的内存块大小,单位 MB。需要注意,`buffer` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
| 10 | buffer | INT | 每个 vnode 写缓存的内存块大小,单位 MB。需要注意,`buffer` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
||||||
| 11 | pagesize | INT | 每个 VNODE 中元数据存储引擎的页大小,单位为 KB。需要注意,`pagesize` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
| 11 | pagesize | INT | 每个 VNODE 中元数据存储引擎的页大小,单位为 KB。需要注意,`pagesize` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
||||||
| 12 | pages | INT | 每个 vnode 元数据存储引擎的缓存页个数。需要注意,`pages` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
| 12 | pages | INT | 每个 vnode 元数据存储引擎的缓存页个数。需要注意,`pages` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
||||||
| 13 | minrows | INT | 文件块中记录的最小条数。需要注意,`minrows` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
| 13 | minrows | INT | 文件块中记录的最小条数。需要注意,`minrows` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
||||||
| 14 | maxrows | INT | 文件块中记录的最大条数。需要注意,`maxrows` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
| 14 | maxrows | INT | 文件块中记录的最大条数。需要注意,`maxrows` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
||||||
| 15 | comp | INT | 数据压缩方式。需要注意,`comp` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
| 15 | comp | INT | 数据压缩方式。需要注意,`comp` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
||||||
| 16 | precision | VARCHAR(2) | 时间分辨率。需要注意,`precision` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
| 16 | precision | VARCHAR(2) | 时间分辨率。需要注意,`precision` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
||||||
| 17 | status | VARCHAR(10) | 数据库状态 |
|
| 17 | status | VARCHAR(10) | 数据库状态 |
|
||||||
| 18 | retentions | VARCHAR(60) | 数据的聚合周期和保存时长。需要注意,`retentions` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
| 18 | retentions | VARCHAR(60) | 数据的聚合周期和保存时长。需要注意,`retentions` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
||||||
| 19 | single_stable | BOOL | 表示此数据库中是否只可以创建一个超级表。需要注意,`single_stable` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
| 19 | single_stable | BOOL | 表示此数据库中是否只可以创建一个超级表。需要注意,`single_stable` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
||||||
| 20 | cachemodel | VARCHAR(60) | 表示是否在内存中缓存子表的最近数据。需要注意,`cachemodel` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
| 20 | cachemodel | VARCHAR(60) | 表示是否在内存中缓存子表的最近数据。需要注意,`cachemodel` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
||||||
| 21 | cachesize | INT | 表示每个 vnode 中用于缓存子表最近数据的内存大小。需要注意,`cachesize` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
| 21 | cachesize | INT | 表示每个 vnode 中用于缓存子表最近数据的内存大小。需要注意,`cachesize` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
||||||
| 22 | wal_level | INT | WAL 级别。需要注意,`wal_level` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
| 22 | wal_level | INT | WAL 级别。需要注意,`wal_level` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
||||||
| 23 | wal_fsync_period | INT | 数据落盘周期。需要注意,`wal_fsync_period` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
| 23 | wal_fsync_period | INT | 数据落盘周期。需要注意,`wal_fsync_period` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
||||||
| 24 | wal_retention_period | INT | WAL 的保存时长,单位为秒。需要注意,`wal_retention_period` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
| 24 | wal_retention_period | INT | WAL 的保存时长,单位为秒。需要注意,`wal_retention_period` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
||||||
| 25 | wal_retention_size | INT | WAL 的保存上限。需要注意,`wal_retention_size` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
| 25 | wal_retention_size | INT | WAL 的保存上限。需要注意,`wal_retention_size` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
||||||
| 26 | stt_trigger | SMALLINT | 触发文件合并的落盘文件的个数。需要注意,`stt_trigger` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
| 26 | stt_trigger | SMALLINT | 触发文件合并的落盘文件的个数。需要注意,`stt_trigger` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。|
|
||||||
| 27 | table_prefix | SMALLINT | 内部存储引擎根据表名分配存储该表数据的 VNODE 时要忽略的前缀的长度。需要注意,`table_prefix` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
| 27 | table_prefix | SMALLINT | 内部存储引擎根据表名分配存储该表数据的 VNODE 时要忽略的前缀的长度。需要注意,`table_prefix` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。|
|
||||||
| 28 | table_suffix | SMALLINT | 内部存储引擎根据表名分配存储该表数据的 VNODE 时要忽略的后缀的长度。需要注意,`table_suffix` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
| 28 | table_suffix | SMALLINT | 内部存储引擎根据表名分配存储该表数据的 VNODE 时要忽略的后缀的长度。需要注意,`table_suffix` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。|
|
||||||
| 29 | tsdb_pagesize | INT | 时序数据存储引擎中的页大小。需要注意,`tsdb_pagesize` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
| 29 | tsdb_pagesize | INT | 时序数据存储引擎中的页大小。需要注意,`tsdb_pagesize` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。|
|
||||||
|
|
||||||
## INS_FUNCTIONS
|
## INS_FUNCTIONS
|
||||||
|
|
||||||
|
@ -123,15 +123,15 @@ TDengine 内置了一个名为 `INFORMATION_SCHEMA` 的数据库,提供对数
|
||||||
| # | **列名** | **数据类型** | **说明** |
|
| # | **列名** | **数据类型** | **说明** |
|
||||||
| --- | :-----------: | ------------- | --------------------------------------------------------------------------------------------- |
|
| --- | :-----------: | ------------- | --------------------------------------------------------------------------------------------- |
|
||||||
| 1 | name | VARCHAR(64) | 函数名 |
|
| 1 | name | VARCHAR(64) | 函数名 |
|
||||||
| 2 | comment | VARCHAR(255) | 补充说明。需要注意,`comment` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
| 2 | comment | VARCHAR(255) | 补充说明。需要注意,`comment` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
||||||
| 3 | aggregate | INT | 是否为聚合函数。需要注意,`aggregate` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
| 3 | aggregate | INT | 是否为聚合函数。需要注意,`aggregate` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。|
|
||||||
| 4 | output_type | VARCHAR(31) | 输出类型 |
|
| 4 | output_type | VARCHAR(31) | 输出类型 |
|
||||||
| 5 | create_time | TIMESTAMP | 创建时间 |
|
| 5 | create_time | TIMESTAMP | 创建时间 |
|
||||||
| 6 | code_len | INT | 代码长度 |
|
| 6 | code_len | INT | 代码长度 |
|
||||||
| 7 | bufsize | INT | buffer 大小 |
|
| 7 | bufsize | INT | buffer 大小 |
|
||||||
| 8 | func_language | VARCHAR(31) | 自定义函数编程语言 |
|
| 8 | func_language | VARCHAR(31) | 自定义函数编程语言 |
|
||||||
| 9 | func_body | VARCHAR(16384) | 函数体定义 |
|
| 9 | func_body | VARCHAR(16384) | 函数体定义 |
|
||||||
| 10 | func_version | INT | 函数版本号。初始版本为0,每次替换更新,版本号加1。 |
|
| 10 | func_version | INT | 函数版本号。初始版本为0,每次替换更新,版本号加1。 |
|
||||||
|
|
||||||
|
|
||||||
## INS_INDEXES
|
## INS_INDEXES
|
||||||
|
@ -145,7 +145,7 @@ TDengine 内置了一个名为 `INFORMATION_SCHEMA` 的数据库,提供对数
|
||||||
| 3 | index_name | VARCHAR(192) | 索引名 |
|
| 3 | index_name | VARCHAR(192) | 索引名 |
|
||||||
| 4 | column_name | VARCHAR(64) | 建索引的列的列名 |
|
| 4 | column_name | VARCHAR(64) | 建索引的列的列名 |
|
||||||
| 5 | index_type | VARCHAR(10) | 目前有 SMA 和 tag |
|
| 5 | index_type | VARCHAR(10) | 目前有 SMA 和 tag |
|
||||||
| 6 | index_extensions | VARCHAR(256) | 索引的额外信息。对 SMA/tag 类型的索引,是函数名的列表。 |
|
| 6 | index_extensions | VARCHAR(256) | 索引的额外信息。对 SMA/tag 类型的索引,是函数名的列表。|
|
||||||
|
|
||||||
## INS_STABLES
|
## INS_STABLES
|
||||||
|
|
||||||
|
@ -157,12 +157,12 @@ TDengine 内置了一个名为 `INFORMATION_SCHEMA` 的数据库,提供对数
|
||||||
| 2 | db_name | VARCHAR(64) | 超级表所在的数据库的名称 |
|
| 2 | db_name | VARCHAR(64) | 超级表所在的数据库的名称 |
|
||||||
| 3 | create_time | TIMESTAMP | 创建时间 |
|
| 3 | create_time | TIMESTAMP | 创建时间 |
|
||||||
| 4 | columns | INT | 列数目 |
|
| 4 | columns | INT | 列数目 |
|
||||||
| 5 | tags | INT | 标签数目。需要注意,`tags` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
| 5 | tags | INT | 标签数目。需要注意,`tags` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
||||||
| 6 | last_update | TIMESTAMP | 最后更新时间 |
|
| 6 | last_update | TIMESTAMP | 最后更新时间 |
|
||||||
| 7 | table_comment | VARCHAR(1024) | 表注释 |
|
| 7 | table_comment | VARCHAR(1024) | 表注释 |
|
||||||
| 8 | watermark | VARCHAR(64) | 窗口的关闭时间。需要注意,`watermark` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
| 8 | watermark | VARCHAR(64) | 窗口的关闭时间。需要注意,`watermark` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
||||||
| 9 | max_delay | VARCHAR(64) | 推送计算结果的最大延迟。需要注意,`max_delay` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
| 9 | max_delay | VARCHAR(64) | 推送计算结果的最大延迟。需要注意,`max_delay` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。|
|
||||||
| 10 | rollup | VARCHAR(128) | rollup 聚合函数。需要注意,`rollup` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
| 10 | rollup | VARCHAR(128) | rollup 聚合函数。需要注意,`rollup` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
||||||
|
|
||||||
## INS_TABLES
|
## INS_TABLES
|
||||||
|
|
||||||
|
@ -177,7 +177,7 @@ TDengine 内置了一个名为 `INFORMATION_SCHEMA` 的数据库,提供对数
|
||||||
| 5 | stable_name | VARCHAR(192) | 所属的超级表表名 |
|
| 5 | stable_name | VARCHAR(192) | 所属的超级表表名 |
|
||||||
| 6 | uid | BIGINT | 表 id |
|
| 6 | uid | BIGINT | 表 id |
|
||||||
| 7 | vgroup_id | INT | vgroup id |
|
| 7 | vgroup_id | INT | vgroup id |
|
||||||
| 8 | ttl | INT | 表的生命周期。需要注意,`ttl` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
| 8 | ttl | INT | 表的生命周期。需要注意 `ttl` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。|
|
||||||
| 9 | table_comment | VARCHAR(1024) | 表注释 |
|
| 9 | table_comment | VARCHAR(1024) | 表注释 |
|
||||||
| 10 | type | VARCHAR(21) | 表类型 |
|
| 10 | type | VARCHAR(21) | 表类型 |
|
||||||
|
|
||||||
|
@ -215,7 +215,7 @@ TDengine 内置了一个名为 `INFORMATION_SCHEMA` 的数据库,提供对数
|
||||||
| 1 | name | VARCHAR(24) | 用户名 |
|
| 1 | name | VARCHAR(24) | 用户名 |
|
||||||
| 2 | super | TINYINT | 用户是否为超级用户,1:是,0:否 |
|
| 2 | super | TINYINT | 用户是否为超级用户,1:是,0:否 |
|
||||||
| 3 | enable | TINYINT | 用户是否启用,1:是,0:否 |
|
| 3 | enable | TINYINT | 用户是否启用,1:是,0:否 |
|
||||||
| 4 | sysinfo | TINYINT | 用户是否可查看系统信息,1:是, 0:否 |
|
| 4 | sysinfo | TINYINT | 用户是否可查看系统信息,1:是,0:否 |
|
||||||
| 5 | create_time | TIMESTAMP | 创建时间 |
|
| 5 | create_time | TIMESTAMP | 创建时间 |
|
||||||
| 6 | allowed_host | VARCHAR(49152)| IP 白名单 |
|
| 6 | allowed_host | VARCHAR(49152)| IP 白名单 |
|
||||||
|
|
||||||
|
@ -227,13 +227,13 @@ TDengine 内置了一个名为 `INFORMATION_SCHEMA` 的数据库,提供对数
|
||||||
| --- | :---------: | ------------ | --------------------------------------------------------------------------------------------------------- |
|
| --- | :---------: | ------------ | --------------------------------------------------------------------------------------------------------- |
|
||||||
| 1 | version | VARCHAR(9) | 企业版授权说明:official(官方授权的)/trial(试用的) |
|
| 1 | version | VARCHAR(9) | 企业版授权说明:official(官方授权的)/trial(试用的) |
|
||||||
| 2 | cpu_cores | VARCHAR(9) | 授权使用的 CPU 核心数量 |
|
| 2 | cpu_cores | VARCHAR(9) | 授权使用的 CPU 核心数量 |
|
||||||
| 3 | dnodes | VARCHAR(10) | 授权使用的 dnode 节点数量。需要注意,`dnodes` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
| 3 | dnodes | VARCHAR(10) | 授权使用的 dnode 节点数量。需要注意,`dnodes` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
||||||
| 4 | streams | VARCHAR(10) | 授权创建的流数量。需要注意,`streams` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
| 4 | streams | VARCHAR(10) | 授权创建的流数量。需要注意,`streams` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
||||||
| 5 | users | VARCHAR(10) | 授权创建的用户数量。需要注意,`users` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
| 5 | users | VARCHAR(10) | 授权创建的用户数量。需要注意,`users` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
||||||
| 6 | accounts | VARCHAR(10) | 授权创建的帐户数量。需要注意,`accounts` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
| 6 | accounts | VARCHAR(10) | 授权创建的帐户数量。需要注意,`accounts` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
||||||
| 7 | storage | VARCHAR(21) | 授权使用的存储空间大小。需要注意,`storage` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
| 7 | storage | VARCHAR(21) | 授权使用的存储空间大小。需要注意,`storage` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
||||||
| 8 | connections | VARCHAR(21) | 授权使用的客户端连接数量。需要注意,`connections` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
| 8 | connections | VARCHAR(21) | 授权使用的客户端连接数量。需要注意,`connections` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。|
|
||||||
| 9 | databases | VARCHAR(11) | 授权使用的数据库数量。需要注意,`databases` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
| 9 | databases | VARCHAR(11) | 授权使用的数据库数量。需要注意,`databases` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
||||||
| 10 | speed | VARCHAR(9) | 授权使用的数据点每秒写入数量 |
|
| 10 | speed | VARCHAR(9) | 授权使用的数据点每秒写入数量 |
|
||||||
| 11 | querytime | VARCHAR(9) | 授权使用的查询总时长 |
|
| 11 | querytime | VARCHAR(9) | 授权使用的查询总时长 |
|
||||||
| 12 | timeseries | VARCHAR(21) | 授权使用的测点数量 |
|
| 12 | timeseries | VARCHAR(21) | 授权使用的测点数量 |
|
||||||
|
@ -248,7 +248,7 @@ TDengine 内置了一个名为 `INFORMATION_SCHEMA` 的数据库,提供对数
|
||||||
| --- | :-------: | ------------ | ------------------------------------------------------------------------------------------------ |
|
| --- | :-------: | ------------ | ------------------------------------------------------------------------------------------------ |
|
||||||
| 1 | vgroup_id | INT | vgroup id |
|
| 1 | vgroup_id | INT | vgroup id |
|
||||||
| 2 | db_name | VARCHAR(32) | 数据库名 |
|
| 2 | db_name | VARCHAR(32) | 数据库名 |
|
||||||
| 3 | tables | INT | 此 vgroup 内有多少表。需要注意,`tables` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
| 3 | tables | INT | 此 vgroup 内有多少表。需要注意,`tables` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。|
|
||||||
| 4 | status | VARCHAR(10) | 此 vgroup 的状态 |
|
| 4 | status | VARCHAR(10) | 此 vgroup 的状态 |
|
||||||
| 5 | v1_dnode | INT | 第一个成员所在的 dnode 的 id |
|
| 5 | v1_dnode | INT | 第一个成员所在的 dnode 的 id |
|
||||||
| 6 | v1_status | VARCHAR(10) | 第一个成员的状态 |
|
| 6 | v1_status | VARCHAR(10) | 第一个成员的状态 |
|
||||||
|
@ -258,7 +258,7 @@ TDengine 内置了一个名为 `INFORMATION_SCHEMA` 的数据库,提供对数
|
||||||
| 10 | v3_status | VARCHAR(10) | 第三个成员的状态 |
|
| 10 | v3_status | VARCHAR(10) | 第三个成员的状态 |
|
||||||
| 11 | nfiles | INT | 此 vgroup 中数据/元数据文件的数量 |
|
| 11 | nfiles | INT | 此 vgroup 中数据/元数据文件的数量 |
|
||||||
| 12 | file_size | INT | 此 vgroup 中数据/元数据文件的大小 |
|
| 12 | file_size | INT | 此 vgroup 中数据/元数据文件的大小 |
|
||||||
| 13 | tsma | TINYINT | 此 vgroup 是否专用于 Time-range-wise SMA,1: 是, 0: 否 |
|
| 13 | tsma | TINYINT | 此 vgroup 是否专用于 Time-range-wise SMA,1: 是,0: 否 |
|
||||||
|
|
||||||
## INS_CONFIGS
|
## INS_CONFIGS
|
||||||
|
|
||||||
|
@ -267,7 +267,7 @@ TDengine 内置了一个名为 `INFORMATION_SCHEMA` 的数据库,提供对数
|
||||||
| # | **列名** | **数据类型** | **说明** |
|
| # | **列名** | **数据类型** | **说明** |
|
||||||
| --- | :------: | ------------ | --------------------------------------------------------------------------------------- |
|
| --- | :------: | ------------ | --------------------------------------------------------------------------------------- |
|
||||||
| 1 | name | VARCHAR(32) | 配置项名称 |
|
| 1 | name | VARCHAR(32) | 配置项名称 |
|
||||||
| 2 | value | VARCHAR(64) | 该配置项的值。需要注意,`value` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
| 2 | value | VARCHAR(64) | 该配置项的值。需要注意,`value` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。|
|
||||||
|
|
||||||
## INS_DNODE_VARIABLES
|
## INS_DNODE_VARIABLES
|
||||||
|
|
||||||
|
@ -277,7 +277,7 @@ TDengine 内置了一个名为 `INFORMATION_SCHEMA` 的数据库,提供对数
|
||||||
| --- | :------: | ------------ | --------------------------------------------------------------------------------------- |
|
| --- | :------: | ------------ | --------------------------------------------------------------------------------------- |
|
||||||
| 1 | dnode_id | INT | dnode 的 ID |
|
| 1 | dnode_id | INT | dnode 的 ID |
|
||||||
| 2 | name | VARCHAR(32) | 配置项名称 |
|
| 2 | name | VARCHAR(32) | 配置项名称 |
|
||||||
| 3 | value | VARCHAR(64) | 该配置项的值。需要注意,`value` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
| 3 | value | VARCHAR(64) | 该配置项的值。需要注意,`value` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。|
|
||||||
|
|
||||||
## INS_TOPICS
|
## INS_TOPICS
|
||||||
|
|
||||||
|
@ -312,7 +312,7 @@ TDengine 内置了一个名为 `INFORMATION_SCHEMA` 的数据库,提供对数
|
||||||
| 5 | source_db | VARCHAR(64) | 源数据库 |
|
| 5 | source_db | VARCHAR(64) | 源数据库 |
|
||||||
| 6 | target_db | VARCHAR(64) | 目的数据库 |
|
| 6 | target_db | VARCHAR(64) | 目的数据库 |
|
||||||
| 7 | target_table | VARCHAR(192) | 流计算写入的目标表 |
|
| 7 | target_table | VARCHAR(192) | 流计算写入的目标表 |
|
||||||
| 8 | watermark | BIGINT | watermark,详见 SQL 手册流式计算。需要注意,`watermark` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
| 8 | watermark | BIGINT | watermark,详见 SQL 手册流式计算。需要注意,`watermark` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。 |
|
||||||
| 9 | trigger | INT | 计算结果推送模式,详见 SQL 手册流式计算。需要注意,`trigger` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。|
|
| 9 | trigger | INT | 计算结果推送模式,详见 SQL 手册流式计算。需要注意,`trigger` 为 TDengine 关键字,作为列名使用时需要使用 ` 进行转义。|
|
||||||
|
|
||||||
## INS_USER_PRIVILEGES
|
## INS_USER_PRIVILEGES
|
||||||
|
@ -333,14 +333,14 @@ TDengine 内置了一个名为 `INFORMATION_SCHEMA` 的数据库,提供对数
|
||||||
|:----|:-----------|:------------|:--------|
|
|:----|:-----------|:------------|:--------|
|
||||||
| 1 | db_name | VARCHAR(32) | 数据库名称 |
|
| 1 | db_name | VARCHAR(32) | 数据库名称 |
|
||||||
| 2 | vgroup_id | INT | vgroup 的 ID |
|
| 2 | vgroup_id | INT | vgroup 的 ID |
|
||||||
| 3 | wal | BIGINT | wal 文件大小, 单位为 K |
|
| 3 | wal | BIGINT | wal 文件大小,单位为 KB |
|
||||||
| 4 | data1 | BIGINT | 一级存储上数据文件的大小,单位为KB |
|
| 4 | data1 | BIGINT | 一级存储上数据文件的大小,单位为 KB |
|
||||||
| 5 | data2 | BIGINT | 二级存储上数据文件的大小,单位为 KB |
|
| 5 | data2 | BIGINT | 二级存储上数据文件的大小,单位为 KB |
|
||||||
| 6 | data3 | BIGINT | 三级存储上数据文件的大小, 单位为KB |
|
| 6 | data3 | BIGINT | 三级存储上数据文件的大小,单位为 KB |
|
||||||
| 7 | cache_rdb | BIGINT | last/last_row 文件的大小,单位为KB |
|
| 7 | cache_rdb | BIGINT | last/last_row 文件的大小,单位为 KB |
|
||||||
| 8 | table_meta | BIGINT | meta 文件的大小, 单位为KB |
|
| 8 | table_meta | BIGINT | meta 文件的大小,单位为 KB |
|
||||||
| 9 | s3 | BIGINT | s3 上占用的大小, 单位为KB |
|
| 9 | s3 | BIGINT | s3 上占用的大小,单位为 KB |
|
||||||
| 10 | raw_data | BIGINT | 预估的原始数据的大小, 单位为KB |
|
| 10 | raw_data | BIGINT | 预估的原始数据的大小,单位为 KB |
|
||||||
|
|
||||||
|
|
||||||
## INS_FILESETS
|
## INS_FILESETS
|
||||||
|
|
|
@ -14,7 +14,7 @@ TDengine 3.0 版本开始提供一个内置数据库 `performance_schema`,其
|
||||||
| --- | :----------: | ------------ | ------------------------------- |
|
| --- | :----------: | ------------ | ------------------------------- |
|
||||||
| 1 | app_id | UBIGINT | 客户端 ID |
|
| 1 | app_id | UBIGINT | 客户端 ID |
|
||||||
| 2 | ip | BINARY(16) | 客户端地址 |
|
| 2 | ip | BINARY(16) | 客户端地址 |
|
||||||
| 3 | pid | INT | 客户端进程 号 |
|
| 3 | pid | INT | 客户端进程号 |
|
||||||
| 4 | name | BINARY(24) | 客户端名称 |
|
| 4 | name | BINARY(24) | 客户端名称 |
|
||||||
| 5 | start_time | TIMESTAMP | 客户端启动时间 |
|
| 5 | start_time | TIMESTAMP | 客户端启动时间 |
|
||||||
| 6 | insert_req | UBIGINT | insert 请求次数 |
|
| 6 | insert_req | UBIGINT | insert 请求次数 |
|
||||||
|
@ -69,7 +69,7 @@ TDengine 3.0 版本开始提供一个内置数据库 `performance_schema`,其
|
||||||
| 1 | consumer_id | BIGINT | 消费者的唯一 ID |
|
| 1 | consumer_id | BIGINT | 消费者的唯一 ID |
|
||||||
| 2 | consumer_group | BINARY(192) | 消费者组 |
|
| 2 | consumer_group | BINARY(192) | 消费者组 |
|
||||||
| 3 | client_id | BINARY(192) | 用户自定义字符串,通过创建 consumer 时指定 client_id 来展示 |
|
| 3 | client_id | BINARY(192) | 用户自定义字符串,通过创建 consumer 时指定 client_id 来展示 |
|
||||||
| 4 | status | BINARY(20) | 消费者当前状态。消费者状态包括:ready(正常可用)、 lost(连接已丢失)、 rebalancing(消费者所属 vgroup 正在分配中)、unknown(未知状态)|
|
| 4 | status | BINARY(20) | 消费者当前状态。消费者状态包括:ready(正常可用)、lost(连接已丢失)、rebalancing(消费者所属 vgroup 正在分配中)、unknown(未知状态)|
|
||||||
| 5 | topics | BINARY(204) | 被订阅的 topic。若订阅多个 topic,则展示为多行 |
|
| 5 | topics | BINARY(204) | 被订阅的 topic。若订阅多个 topic,则展示为多行 |
|
||||||
| 6 | up_time | TIMESTAMP | 第一次连接 taosd 的时间 |
|
| 6 | up_time | TIMESTAMP | 第一次连接 taosd 的时间 |
|
||||||
| 7 | subscribe_time | TIMESTAMP | 上一次发起订阅的时间 |
|
| 7 | subscribe_time | TIMESTAMP | 上一次发起订阅的时间 |
|
||||||
|
|
|
@ -20,7 +20,7 @@ SHOW APPS;
|
||||||
SHOW CLUSTER;
|
SHOW CLUSTER;
|
||||||
```
|
```
|
||||||
|
|
||||||
显示当前集群的信息
|
显示当前集群的信息。
|
||||||
|
|
||||||
## SHOW CLUSTER ALIVE
|
## SHOW CLUSTER ALIVE
|
||||||
|
|
||||||
|
@ -28,17 +28,22 @@ SHOW CLUSTER;
|
||||||
SHOW CLUSTER ALIVE;
|
SHOW CLUSTER ALIVE;
|
||||||
```
|
```
|
||||||
|
|
||||||
查询当前集群的状态是否可用,返回值: 0:不可用 1:完全可用 2:部分可用(集群中部分节点下线,但其它节点仍可以正常使用)
|
查询当前集群的状态是否可用,返回值如下
|
||||||
|
- 0:不可用
|
||||||
|
- 1:完全可用
|
||||||
|
- 2:部分可用(集群中部分节点下线,但其它节点仍可以正常使用)
|
||||||
|
|
||||||
## SHOW CLUSTER MACHINES
|
## SHOW CLUSTER MACHINES
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
SHOW CLUSTER MACHINES; // 从 TDengine 3.2.3.0 版本开始支持
|
SHOW CLUSTER MACHINES;
|
||||||
```
|
```
|
||||||
|
|
||||||
显示集群的机器码等信息。
|
显示集群的机器码等信息。
|
||||||
|
|
||||||
注:企业版独有
|
备注
|
||||||
|
- 企业版功能
|
||||||
|
- v3.2.3.0 开始支持
|
||||||
|
|
||||||
## SHOW CONNECTIONS
|
## SHOW CONNECTIONS
|
||||||
|
|
||||||
|
@ -70,7 +75,7 @@ SHOW CREATE DATABASE db_name;
|
||||||
SHOW CREATE STABLE [db_name.]stb_name;
|
SHOW CREATE STABLE [db_name.]stb_name;
|
||||||
```
|
```
|
||||||
|
|
||||||
显示 tb_name 指定的超级表的创建语句
|
显示 tb_name 指定的超级表的创建语句。
|
||||||
|
|
||||||
## SHOW CREATE TABLE
|
## SHOW CREATE TABLE
|
||||||
|
|
||||||
|
@ -114,7 +119,8 @@ SHOW GRANTS FULL; // 从 TDengine 3.2.3.0 版本开始支持
|
||||||
|
|
||||||
显示企业版许可授权的信息。
|
显示企业版许可授权的信息。
|
||||||
|
|
||||||
注:企业版独有
|
备注
|
||||||
|
- 企业版功能
|
||||||
|
|
||||||
## SHOW INDEXES
|
## SHOW INDEXES
|
||||||
|
|
||||||
|
@ -147,7 +153,7 @@ SHOW MNODES;
|
||||||
SHOW QNODES;
|
SHOW QNODES;
|
||||||
```
|
```
|
||||||
|
|
||||||
显示当前系统中 QNODE (查询节点)的信息。
|
显示当前系统中 QNODE(查询节点)的信息。
|
||||||
|
|
||||||
## SHOW QUERIES
|
## SHOW QUERIES
|
||||||
|
|
||||||
|
@ -155,7 +161,7 @@ SHOW QNODES;
|
||||||
SHOW QUERIES;
|
SHOW QUERIES;
|
||||||
```
|
```
|
||||||
|
|
||||||
显示当前系统中正在进行的写入(更新)/查询/删除。(由于内部 API 命名原因,所以统称 QUERIES)
|
显示当前系统中正在进行的写入(更新)、查询、删除。(由于内部 API 命名原因,所以统称 QUERIES)
|
||||||
|
|
||||||
## SHOW SCORES
|
## SHOW SCORES
|
||||||
|
|
||||||
|
@ -165,7 +171,8 @@ SHOW SCORES;
|
||||||
|
|
||||||
显示系统被许可授权的容量的信息。
|
显示系统被许可授权的容量的信息。
|
||||||
|
|
||||||
注:企业版独有。
|
备注
|
||||||
|
- 企业版功能
|
||||||
|
|
||||||
## SHOW STABLES
|
## SHOW STABLES
|
||||||
|
|
||||||
|
@ -219,11 +226,11 @@ SHOW TABLE DISTRIBUTED table_name;
|
||||||
|
|
||||||
_block_dist: Total_Blocks=[5] Total_Size=[93.65 KB] Average_size=[18.73 KB] Compression_Ratio=[23.98 %]
|
_block_dist: Total_Blocks=[5] Total_Size=[93.65 KB] Average_size=[18.73 KB] Compression_Ratio=[23.98 %]
|
||||||
|
|
||||||
Total_Blocks: 表 d0 占用的 block 个数为 5 个
|
Total_Blocks:表 d0 占用的 block 个数为 5 个
|
||||||
|
|
||||||
Total_Size: 表 d0 所有 block 在文件中占用的大小为 93.65 KB
|
Total_Size: 表 d0 所有 block 在文件中占用的大小为 93.65 KB
|
||||||
|
|
||||||
Average_size: 平均每个 block 在文件中占用的空间大小为 18.73 KB
|
Average_size:平均每个 block 在文件中占用的空间大小为 18.73 KB
|
||||||
|
|
||||||
Compression_Ratio: 数据压缩率 23.98%
|
Compression_Ratio: 数据压缩率 23.98%
|
||||||
|
|
||||||
|
@ -232,7 +239,7 @@ Compression_Ratio: 数据压缩率 23.98%
|
||||||
|
|
||||||
_block_dist: Total_Rows=[20000] Inmem_Rows=[0] MinRows=[3616] MaxRows=[4096] Average_Rows=[4000]
|
_block_dist: Total_Rows=[20000] Inmem_Rows=[0] MinRows=[3616] MaxRows=[4096] Average_Rows=[4000]
|
||||||
|
|
||||||
Total_Rows: 统计表 d0 的存储在磁盘上行数 20000 行(该数值仅供参考,不是精确的行数。获得精确的行数需要使用 count 函数)
|
Total_Rows:统计表 d0 的存储在磁盘上行数 20000 行(该数值仅供参考,不是精确的行数。获得精确的行数需要使用 count 函数)
|
||||||
|
|
||||||
Inmem_Rows: 存储在写缓存中的数据行数(没有落盘),0 行表示内存缓存中没有数据
|
Inmem_Rows: 存储在写缓存中的数据行数(没有落盘),0 行表示内存缓存中没有数据
|
||||||
|
|
||||||
|
@ -247,7 +254,7 @@ Average_Rows: 每个 BLOCK 中的平均行数,此时为 4000 行
|
||||||
|
|
||||||
_block_dist: Total_Tables=[1] Total_Files=[2] Total_Vgroups=[1]
|
_block_dist: Total_Tables=[1] Total_Files=[2] Total_Vgroups=[1]
|
||||||
|
|
||||||
Total_Tables: 子表的个数,这里为 1
|
Total_Tables: 子表的个数,这里为 1
|
||||||
|
|
||||||
Total_Files: 表数据被分别保存的数据文件数量,这里是 2 个文件
|
Total_Files: 表数据被分别保存的数据文件数量,这里是 2 个文件
|
||||||
|
|
||||||
|
@ -281,7 +288,7 @@ Query OK, 24 row(s) in set (0.002444s)
|
||||||
</code></pre>
|
</code></pre>
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
上面是块中包含数据行数的块儿分布情况图,这里的 0100 0299 0498 … 表示的是每个块中包含的数据行数,上面的意思就是这个表的 5 个块,分布在 3483 ~3681 行的块有 1 个,占整个块的 20%,分布在 3881 ~ 4096(最大行数)的块数为 4 个,占整个块的 80%, 其它区域内分布块数为 0。
|
上面是块中包含数据行数的块儿分布情况图,这里的 `0100 0299 0498 …` 表示的是每个块中包含的数据行数,上面的意思就是这个表的 5 个块,分布在 `3483 ~ 3681` 行的块有 1 个,占整个块的 20%,分布在 `3881 ~ 4096`(最大行数)的块数为 4 个,占整个块的 80%, 其它区域内分布块数为 0。
|
||||||
|
|
||||||
需要注意,这里只会显示 data 文件中数据块的信息,stt 文件中的数据的信息不会被显示。
|
需要注意,这里只会显示 data 文件中数据块的信息,stt 文件中的数据的信息不会被显示。
|
||||||
|
|
||||||
|
@ -309,7 +316,7 @@ SHOW TRANSACTIONS;
|
||||||
SHOW TRANSACTION [tranaction_id];
|
SHOW TRANSACTION [tranaction_id];
|
||||||
```
|
```
|
||||||
|
|
||||||
显示当前系统中正在执行的所有或者某一个事务的信息(该事务仅针对除普通表以外的元数据级别)
|
显示当前系统中正在执行的所有或者某一个事务的信息(该事务仅针对除普通表以外的元数据级别)。
|
||||||
|
|
||||||
## SHOW USERS
|
## SHOW USERS
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,7 @@ CREATE USER user_name PASS 'password' [SYSINFO {1|0}] [CREATEDB {1|0}];
|
||||||
|
|
||||||
`SYSINFO` 表示该用户是否能够查看系统信息。`1` 表示可以查看,`0` 表示无权查看。系统信息包括服务配置、dnode、vnode、存储等信息。缺省值为 `1`。
|
`SYSINFO` 表示该用户是否能够查看系统信息。`1` 表示可以查看,`0` 表示无权查看。系统信息包括服务配置、dnode、vnode、存储等信息。缺省值为 `1`。
|
||||||
|
|
||||||
`CREATEDB` 表示该用户是否能够创建数据库。`1` 表示可以创建,`0` 表示无权创建。缺省值为 `0`。// 从 TDengine 企业版 3.3.2.0 开始支持
|
`CREATEDB` 表示该用户是否能够创建数据库。`1` 表示可以创建,`0` 表示无权创建。缺省值为 `0`。从企业版 v3.3.2.0 开始支持。
|
||||||
|
|
||||||
在下面的示例中,我们创建一个密码为 `abc123!@#` 且可以查看系统信息的用户。
|
在下面的示例中,我们创建一个密码为 `abc123!@#` 且可以查看系统信息的用户。
|
||||||
|
|
||||||
|
@ -76,12 +76,12 @@ alter_user_clause: {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
- PASS: 修改密码,后跟新密码
|
- PASS:修改密码,后跟新密码
|
||||||
- ENABLE: 启用或禁用该用户,`1` 表示启用,`0` 表示禁用
|
- ENABLE:启用或禁用该用户,`1` 表示启用,`0` 表示禁用
|
||||||
- SYSINFO: 允许或禁止查看系统信息,`1` 表示允许,`0` 表示禁止
|
- SYSINFO:允许或禁止查看系统信息,`1` 表示允许,`0` 表示禁止
|
||||||
- CREATEDB: 允许或禁止创建数据库,`1` 表示允许,`0` 表示禁止。// 从 TDengine 企业版 3.3.2.0 开始支持
|
- CREATEDB:允许或禁止创建数据库,`1` 表示允许,`0` 表示禁止。从企业版 v3.3.2.0 开始支持。
|
||||||
|
|
||||||
下面的示例禁用了名为 `test` 的用户:
|
下面的示例禁用了名为 `test` 的用户。
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
taos> alter user test enable 0;
|
taos> alter user test enable 0;
|
||||||
|
|
|
@ -3,7 +3,8 @@ toc_max_heading_level: 4
|
||||||
title: 权限管理
|
title: 权限管理
|
||||||
---
|
---
|
||||||
|
|
||||||
TDengine 中的权限管理分为[用户管理](../user)、数据库授权管理以及消息订阅授权管理,本节重点说明数据库授权和订阅授权。
|
TDengine 中的权限管理分为 [用户管理](../user)、数据库授权管理以及消息订阅授权管理,本节重点说明数据库授权和订阅授权。
|
||||||
|
授权管理仅在 TDengine 企业版中可用,请联系 TDengine 销售团队。授权语法在社区版可用,但不起作用。
|
||||||
|
|
||||||
## 数据库访问授权
|
## 数据库访问授权
|
||||||
|
|
||||||
|
@ -32,19 +33,18 @@ priv_level : {
|
||||||
对数据库的访问权限包含读和写两种权限,它们可以被分别授予,也可以被同时授予。
|
对数据库的访问权限包含读和写两种权限,它们可以被分别授予,也可以被同时授予。
|
||||||
|
|
||||||
说明
|
说明
|
||||||
|
- priv_level 格式中 "." 之前为数据库名称,"." 之后为表名称,意思为表级别的授权控制。如果 "." 之后为 "\*",意为 "." 前所指定的数据库中的所有表
|
||||||
- priv_level 格式中 "." 之前为数据库名称, "." 之后为表名称,意思为表级别的授权控制。如果 "." 之后为 "\*" ,意为 "." 前所指定的数据库中的所有表
|
- "dbname.\*" 意思是名为 "dbname" 的数据库中的所有表
|
||||||
- "dbname.\*" 意思是名为 "dbname" 的数据库中的所有表
|
- "\*.\*" 意思是所有数据库名中的所有表
|
||||||
- "\*.\*" 意思是所有数据库名中的所有表
|
|
||||||
|
|
||||||
### 数据库权限说明
|
### 数据库权限说明
|
||||||
|
|
||||||
对 root 用户和普通用户的权限的说明如下表
|
对 root 用户和普通用户的权限的说明如下表
|
||||||
|
|
||||||
| 用户 | 描述 | 权限说明 |
|
| 用户 | 描述 | 权限说明 |
|
||||||
| -------- | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
| -------- | --------------------------------- | -- |
|
||||||
| 超级用户 | 只有 root 是超级用户 | DB 外部 所有操作权限,例如user、dnode、udf、qnode等的CRUD DB 权限,包括 创建 删除 更新,例如修改 Option,移动 Vgruop等 读 写 Enable/Disable 用户 |
|
| 超级用户 | 只有 root 是超级用户 |<br/>DB 外部:所有操作权限,例如 user、dnode、udf、qnode 等的 CRUD <br/>DB 权限:包括创建、删除、修改 Option、移动 Vgruop、读、写、Enable/Disable 用户 |
|
||||||
| 普通用户 | 除 root 以外的其它用户均为普通用户 | 在可读的 DB 中,普通用户可以进行读操作 select describe show subscribe 在可写 DB 的内部,用户可以进行写操作: 创建、删除、修改 超级表 创建、删除、修改 子表 创建、删除、修改 topic 写入数据 被限制系统信息时,不可进行如下操作 show dnode、mnode、vgroups、qnode、snode 修改用户包括自身密码 show db时只能看到自己的db,并且不能看到vgroups、副本、cache等信息 无论是否被限制系统信息,都可以 管理 udf 可以创建 DB 自己创建的 DB 具备所有权限 非自己创建的 DB ,参照读、写列表中的权限 |
|
| 普通用户 | 除 root 以外的其它用户均为普通用户 | <br/>在可读的 DB 中:普通用户可以进行读操作 select、describe、show、subscribe <br/>在可写 DB 的内部,用户可以进行写操作,创建、删除、修改超级表,创建、删除、修改子表,创建、删除、修改 topic。写入数据 <br/>被限制系统信息时,不可进行如下操作 show dnode、mnode、vgroups、qnode、snode、修改用户包括自身密码、`show db` 时只能看到自己的 db,并且不能看到 vgroups、副本、cache等信息 <br/>无论是否被限制系统信息,都可以管理 udf,可以创建 DB、自己创建的 DB 具备所有权限、非自己创建的 DB,参照读、写列表中的权限 |
|
||||||
|
|
||||||
## 消息订阅授权
|
## 消息订阅授权
|
||||||
|
|
||||||
|
@ -60,7 +60,7 @@ REVOKE SUBSCRIBE ON topic_name FROM user_name
|
||||||
|
|
||||||
## 基于标签的授权(表级授权)
|
## 基于标签的授权(表级授权)
|
||||||
|
|
||||||
从 TDengine 3.0.5.0 开始,我们支持按标签授权某个超级表中部分特定的子表。具体的 SQL 语法如下。
|
从 v3.0.5.0 开始,我们支持按标签授权某个超级表中部分特定的子表。具体的 SQL 语法如下。
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
GRANT privileges ON priv_level [WITH tag_condition] TO user_name
|
GRANT privileges ON priv_level [WITH tag_condition] TO user_name
|
||||||
|
@ -109,11 +109,11 @@ priv_level : {
|
||||||
|
|
||||||
下表列出了在不同的数据库授权和表级授权的组合下产生的实际权限。
|
下表列出了在不同的数据库授权和表级授权的组合下产生的实际权限。
|
||||||
|
|
||||||
| | **表无授权** | **表读授权** | **表读授权有标签条件** | **表写授权** | **表写授权有标签条件** |
|
| | **表无授权** | **表读授权** | **表读授权有标签条件** | **表写授权** | **表写授权有标签条件** |
|
||||||
| ---------------- | ---------------- | ---------------------------------------- | ------------------------------------------------------------ | ---------------------------------------- | ---------------------------------------------------------- |
|
| -------------- | ------------- | --------------------------------- | ------------------------------------------------- | ---------------------------------- | -------------------- |
|
||||||
| **数据库无授权** | 无授权 | 对此表有读权限,对数据库下的其他表无权限 | 对此表符合标签权限的子表有读权限,对数据库下的其他表无权限 | 对此表有写权限,对数据库下的其他表无权限 | 对此表符合标签权限的子表有写权限,对数据库下的其他表无权限 |
|
| **数据库无授权** | 无授权 | 对此表有读权限,对数据库下的其他表无权限 | 对此表符合标签权限的子表有读权限,对数据库下的其他表无权限 | 对此表有写权限,对数据库下的其他表无权限 | 对此表符合标签权限的子表有写权限,对数据库下的其他表无权限 |
|
||||||
| **数据库读授权** | 对所有表有读权限 | 对所有表有读权限 | 对此表符合标签权限的子表有读权限,对数据库下的其他表有读权限 | 对此表有写权限,对所有表有读权限 | 对此表符合标签权限的子表有写权限,所有表有读权限 |
|
| **数据库读授权** | 对所有表有读权限 | 对所有表有读权限 | 对此表符合标签权限的子表有读权限,对数据库下的其他表有读权限 | 对此表有写权限,对所有表有读权限 | 对此表符合标签权限的子表有写权限,所有表有读权限 |
|
||||||
| **数据库写授权** | 对所有表有写权限 | 对此表有读权限,对所有表有写权限 | 对此表符合标签权限的子表有读权限,对所有表有写权限 | 对所有表有写权限 | 对此表符合标签权限的子表有写权限,数据库下的其他表有写权限 |
|
| **数据库写授权** | 对所有表有写权限 | 对此表有读权限,对所有表有写权限 | 对此表符合标签权限的子表有读权限,对所有表有写权限 | 对所有表有写权限 | 对此表符合标签权限的子表有写权限,数据库下的其他表有写权限 |
|
||||||
|
|
||||||
|
|
||||||
## 查看用户授权
|
## 查看用户授权
|
||||||
|
@ -126,7 +126,7 @@ show user privileges
|
||||||
|
|
||||||
## 撤销授权
|
## 撤销授权
|
||||||
|
|
||||||
1. 撤销数据库访问的授权
|
1. 撤销数据库访问的授权
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
REVOKE privileges ON priv_level FROM user_name
|
REVOKE privileges ON priv_level FROM user_name
|
||||||
|
@ -148,7 +148,7 @@ priv_level : {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
2. 撤销数据订阅的授权
|
2. 撤销数据订阅的授权
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
REVOKE privileges ON priv_level FROM user_name
|
REVOKE privileges ON priv_level FROM user_name
|
||||||
|
|
|
@ -4,10 +4,10 @@ title: 自定义函数
|
||||||
description: 使用 UDF 的详细指南
|
description: 使用 UDF 的详细指南
|
||||||
---
|
---
|
||||||
|
|
||||||
除了 TDengine 的内置函数以外,用户还可以编写自己的函数逻辑并加入TDengine系统中。
|
除了 TDengine 的内置函数以外,用户还可以编写自己的函数逻辑并加入 TDengine 系统中。
|
||||||
## 创建 UDF
|
## 创建 UDF
|
||||||
|
|
||||||
用户可以通过 SQL 指令在系统中加载客户端所在主机上的 UDF 函数库(不能通过 RESTful 接口或 HTTP 管理界面来进行这一过程)。一旦创建成功,则当前 TDengine 集群的所有用户都可以在 SQL 指令中使用这些函数。UDF 存储在系统的 MNode 节点上,因此即使重启 TDengine 系统,已经创建的 UDF 也仍然可用。
|
用户可以通过 SQL 指令在系统中加载客户端所在主机上的 UDF 函数库(不能通过 RESTful 接口或 HTTP 管理界面来进行这一过程)。一旦创建成功,则当前 TDengine 集群的所有用户都可以在 SQL 指令中使用这些函数。UDF 存储在系统的 mnode 节点上,因此即使重启 TDengine 系统,已经创建的 UDF 也仍然可用。
|
||||||
|
|
||||||
在创建 UDF 时,需要区分标量函数和聚合函数。如果创建时声明了错误的函数类别,则可能导致通过 SQL 指令调用函数时出错。此外,用户需要保证输入数据类型与 UDF 程序匹配,UDF 输出数据类型与 OUTPUTTYPE 匹配。
|
在创建 UDF 时,需要区分标量函数和聚合函数。如果创建时声明了错误的函数类别,则可能导致通过 SQL 指令调用函数时出错。此外,用户需要保证输入数据类型与 UDF 程序匹配,UDF 输出数据类型与 OUTPUTTYPE 匹配。
|
||||||
|
|
||||||
|
@ -15,11 +15,11 @@ description: 使用 UDF 的详细指南
|
||||||
```sql
|
```sql
|
||||||
CREATE [OR REPLACE] FUNCTION function_name AS library_path OUTPUTTYPE output_type [LANGUAGE 'C|Python'];
|
CREATE [OR REPLACE] FUNCTION function_name AS library_path OUTPUTTYPE output_type [LANGUAGE 'C|Python'];
|
||||||
```
|
```
|
||||||
- OR REPLACE: 如果函数已经存在,会修改已有的函数属性。
|
- OR REPLACE:如果函数已经存在,会修改已有的函数属性。
|
||||||
- function_name:标量函数未来在 SQL 中被调用时的函数名;
|
- function_name:标量函数未来在 SQL 中被调用时的函数名。
|
||||||
- LANGUAGE 'C|Python':函数编程语言,目前支持C语言和Python语言。 如果这个从句忽略,编程语言是C语言
|
- LANGUAGE 'C|Python':函数编程语言,目前支持 C 语言和 Python 语言。如果这个从句忽略,编程语言是 C 语言。
|
||||||
- library_path:如果编程语言是C,路径是包含 UDF 函数实现的动态链接库的库文件绝对路径(指的是库文件在当前客户端所在主机上的保存路径,通常是指向一个 .so 文件)。如果编程语言是Python,路径是包含 UDF 函数实现的Python文件路径。这个路径需要用英文单引号或英文双引号括起来;
|
- library_path:如果编程语言是C,路径是包含 UDF 函数实现的动态链接库的库文件绝对路径(指的是库文件在当前客户端所在主机上的保存路径,通常是指向一个 .so 文件)。如果编程语言是 Python,路径是包含 UDF 函数实现的 Python 文件路径。这个路径需要用英文单引号或英文双引号括起来;
|
||||||
- output_type:此函数计算结果的数据类型名称;
|
- output_type:此函数计算结果的数据类型名称。
|
||||||
|
|
||||||
例如,如下语句可以把 libbitand.so 创建为系统中可用的 UDF:
|
例如,如下语句可以把 libbitand.so 创建为系统中可用的 UDF:
|
||||||
|
|
||||||
|
@ -36,19 +36,19 @@ CREATE [OR REPLACE] FUNCTION function_name AS library_path OUTPUTTYPE output_typ
|
||||||
```sql
|
```sql
|
||||||
CREATE [OR REPLACE] AGGREGATE FUNCTION function_name AS library_path OUTPUTTYPE output_type [ BUFSIZE buffer_size ] [LANGUAGE 'C|Python'];
|
CREATE [OR REPLACE] AGGREGATE FUNCTION function_name AS library_path OUTPUTTYPE output_type [ BUFSIZE buffer_size ] [LANGUAGE 'C|Python'];
|
||||||
```
|
```
|
||||||
- OR REPLACE: 如果函数已经存在,会修改已有的函数属性。
|
- OR REPLACE:如果函数已经存在,会修改已有的函数属性。
|
||||||
- function_name:聚合函数未来在 SQL 中被调用时的函数名,必须与函数实现中 udfNormalFunc 的实际名称一致;
|
- function_name:聚合函数未来在 SQL 中被调用时的函数名,必须与函数实现中 udfNormalFunc 的实际名称一致;
|
||||||
- LANGUAGE 'C|Python':函数编程语言,目前支持C语言和Python语言(v3.7+)。
|
- LANGUAGE 'C|Python':函数编程语言,目前支持 C 语言和 Python 语言(v3.7+)。
|
||||||
- library_path:如果编程语言是C,路径是包含 UDF 函数实现的动态链接库的库文件绝对路径(指的是库文件在当前客户端所在主机上的保存路径,通常是指向一个 .so 文件)。如果编程语言是Python,路径是包含 UDF 函数实现的Python文件路径。这个路径需要用英文单引号或英文双引号括起来;;
|
- library_path:如果编程语言是C,路径是包含 UDF 函数实现的动态链接库的库文件绝对路径(指的是库文件在当前客户端所在主机上的保存路径,通常是指向一个 `.so` 文件)。如果编程语言是 Python,路径是包含 UDF 函数实现的 Python 文件路径。这个路径需要用英文单引号或英文双引号括起来;
|
||||||
- output_type:此函数计算结果的数据类型名称;
|
- output_type:此函数计算结果的数据类型名称;
|
||||||
- buffer_size:中间计算结果的缓冲区大小,单位是字节。如果不使用可以不设置。
|
- buffer_size:中间计算结果的缓冲区大小,单位是字节。如果不使用可以不设置。
|
||||||
|
|
||||||
例如,如下语句可以把 libl2norm.so 创建为系统中可用的 UDF:
|
例如,如下语句可以把 libl2norm.so 创建为系统中可用的 UDF。
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
CREATE AGGREGATE FUNCTION l2norm AS "/home/taos/udf_example/libl2norm.so" OUTPUTTYPE DOUBLE bufsize 8;
|
CREATE AGGREGATE FUNCTION l2norm AS "/home/taos/udf_example/libl2norm.so" OUTPUTTYPE DOUBLE bufsize 8;
|
||||||
```
|
```
|
||||||
例如,使用以下语句可以修改已经定义的 l2norm 函数的缓冲区大小为64。
|
例如,使用以下语句可以修改已经定义的 l2norm 函数的缓冲区大小为 64。
|
||||||
```sql
|
```sql
|
||||||
CREATE AGGREGATE FUNCTION l2norm AS "/home/taos/udf_example/libl2norm.so" OUTPUTTYPE DOUBLE bufsize 64;
|
CREATE AGGREGATE FUNCTION l2norm AS "/home/taos/udf_example/libl2norm.so" OUTPUTTYPE DOUBLE bufsize 64;
|
||||||
```
|
```
|
||||||
|
@ -57,25 +57,26 @@ CREATE [OR REPLACE] AGGREGATE FUNCTION function_name AS library_path OUTPUTTYPE
|
||||||
|
|
||||||
## 管理 UDF
|
## 管理 UDF
|
||||||
|
|
||||||
- 删除指定名称的用户定义函数:
|
- 删除指定名称的用户定义函数。
|
||||||
```
|
```
|
||||||
DROP FUNCTION function_name;
|
DROP FUNCTION function_name;
|
||||||
```
|
```
|
||||||
|
|
||||||
- function_name:此参数的含义与 CREATE 指令中的 function_name 参数一致,也即要删除的函数的名字,例如bit_and, l2norm
|
- function_name:此参数的含义与 CREATE 指令中的 function_name 参数一致,也即要删除的函数的名字,例如 bit_and、l2norm
|
||||||
```sql
|
```sql
|
||||||
DROP FUNCTION bit_and;
|
DROP FUNCTION bit_and;
|
||||||
```
|
```
|
||||||
- 显示系统中当前可用的所有 UDF:
|
|
||||||
|
- 显示系统中当前可用的所有 UDF。
|
||||||
```sql
|
```sql
|
||||||
SHOW FUNCTIONS;
|
SHOW FUNCTIONS;
|
||||||
```
|
```
|
||||||
|
|
||||||
## 调用 UDF
|
## 调用 UDF
|
||||||
|
|
||||||
在 SQL 指令中,可以直接以在系统中创建 UDF 时赋予的函数名来调用用户定义函数。例如:
|
在 SQL 指令中,可以直接以在系统中创建 UDF 时赋予的函数名来调用用户定义函数。
|
||||||
```sql
|
```sql
|
||||||
SELECT bit_and(c1,c2) FROM table;
|
SELECT bit_and(c1,c2) FROM table;
|
||||||
```
|
```
|
||||||
|
|
||||||
表示对表 table 上名为 c1, c2 的数据列调用名为 bit_and 的用户定义函数。SQL 指令中用户定义函数可以配合 WHERE 等查询特性来使用。
|
表示对表 table 上名为 c1、c2 的数据列调用名为 bit_and 的用户定义函数。SQL 指令中用户定义函数可以配合 WHERE 等查询特性来使用。
|
||||||
|
|
|
@ -4,36 +4,38 @@ title: 窗口预聚集
|
||||||
description: 窗口预聚集使用说明
|
description: 窗口预聚集使用说明
|
||||||
---
|
---
|
||||||
|
|
||||||
在大数据量场景下, 经常需要查询某段时间内的汇总结果, 当历史数据变多或者时间范围变大时, 查询时间也会相应增加. 通过预聚集的方式可以将计算结果提前存储下来, 后续查询可以直接读取聚集结果, 而不需要扫描原始数据, 如当前Block内的SMA (Small Materialized Aggregates)信息.
|
在大数据量场景下,经常需要查询某段时间内的汇总结果,当历史数据变多或者时间范围变大时,查询时间也会相应增加。通过预聚集的方式可以将计算结果提前存储下来,后续查询可以直接读取聚集结果,而不需要扫描原始数据,如当前 Block 内的 SMA (Small Materialized Aggregates)信息。
|
||||||
Block内的SMA信息粒度较小, 若查询时间范围是日,月甚至年时, Block的数量将会很多, 因此TSMA (Time-Range Small Materialized Aggregates)支持用户指定时间窗口进行预聚集. 通过对固定时间窗口内的数据进行预计算, 并将计算结果存储下来, 查询时通过查询预计算结果以提高查询性能。
|
|
||||||
|
Block 内的 SMA 信息粒度较小,若查询时间范围是日,月甚至年时,Block 的数量将会很多,因此 TSMA (Time-Range Small Materialized Aggregates)支持用户指定时间窗口进行预聚集。通过对固定时间窗口内的数据进行预计算,并将计算结果存储下来,查询时通过查询预计算结果以提高查询性能。
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
## 创建TSMA
|
## 创建 TSMA
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
-- 创建基于超级表或普通表的tsma
|
-- 创建基于超级表或普通表的 tsma
|
||||||
CREATE TSMA tsma_name ON [dbname.]table_name FUNCTION (func_name(func_param) [, ...] ) INTERVAL(time_duration);
|
CREATE TSMA tsma_name ON [dbname.]table_name FUNCTION (func_name(func_param) [, ...] ) INTERVAL(time_duration);
|
||||||
-- 创建基于小窗口tsma的大窗口tsma
|
|
||||||
|
-- 创建基于小窗口 tsma 的大窗口 tsma
|
||||||
CREATE RECURSIVE TSMA tsma_name ON [db_name.]tsma_name1 INTERVAL(time_duration);
|
CREATE RECURSIVE TSMA tsma_name ON [db_name.]tsma_name1 INTERVAL(time_duration);
|
||||||
|
|
||||||
time_duration:
|
time_duration:
|
||||||
number unit
|
number unit
|
||||||
```
|
```
|
||||||
|
|
||||||
创建 TSMA 时需要指定 TSMA 名字, 表名字, 函数列表以及窗口大小. 当基于一个已经存在的 TSMA 创建新的 TSMA 时, 需要使用 `RECURSIVE` 关键字但不能指定 `FUNCTION()`, 新创建的 TSMA 已有 TSMA 拥有相同的函数列表, 且此种情况下所指定的 INTERVAL 必须至少为所基于的 TSMA 窗口长度的整数倍, 并且天不能基于2h或3h建立, 只能基于1h建立, 月也只能基于1d而非2d,3d建立。
|
创建 TSMA 时需要指定 TSMA 名字,表名字,函数列表以及窗口大小。当基于一个已经存在的 TSMA 创建新的 TSMA 时,需要使用 `RECURSIVE` 关键字但不能指定 `FUNCTION()`,新创建的 TSMA 已有 TSMA 拥有相同的函数列表,且此种情况下所指定的 INTERVAL 必须至少为所基于的 TSMA 窗口长度的整数倍,并且天不能基于 2h 或 3h 建立,只能基于 1h 建立,月也只能基于 1d 而非 2d、3d 建立。
|
||||||
|
|
||||||
其中 TSMA 命名规则与表名字类似, 长度最大限制为表名长度限制减去输出表后缀长度, 表名长度限制为193, 输出表后缀为`_tsma_res_stb_`, TSMA 名字最大长度为178.
|
其中 TSMA 命名规则与表名字类似,长度最大限制为表名长度限制减去输出表后缀长度,表名长度限制为 193,输出表后缀为`_tsma_res_stb_`,TSMA 名字最大长度为 178。
|
||||||
|
|
||||||
TSMA只能基于超级表和普通表创建, 不能基于子表创建.
|
TSMA 只能基于超级表和普通表创建,不能基于子表创建。
|
||||||
|
|
||||||
函数列表中只能指定支持的聚集函数(见下文), 并且函数参数必须为1个, 即使当前函数支持多个参数, 函数参数内必须为普通列名, 不能为标签列. 函数列表中完全相同的函数和列会被去重, 如同时创建两个avg(c1), 则只会计算一个输出. TSMA 计算时将会把所有`函数中间结果`都输出到另一张超级表中, 输出超级表还包含了原始表的所有tag列. 函数列表中函数个数最多支持创建表最大列个数(包括tag列)减去 TSMA 计算附加的四列, 分别为`_wstart`, `_wend`, `_wduration`, 以及一个新增tag列 `tbname`, 再减去原始表的tag列数. 若列个数超出限制, 会报`Too many columns`错误.
|
函数列表中只能指定支持的聚集函数(见下文),并且函数参数必须为 1 个,即使当前函数支持多个参数,函数参数内必须为普通列名,不能为标签列。函数列表中完全相同的函数和列会被去重,如同时创建两个 avg(c1),则只会计算一个输出。TSMA 计算时将会把所有 `函数中间结果` 都输出到另一张超级表中,输出超级表还包含了原始表的所有 tag 列。函数列表中函数个数最多支持创建表最大列个数(包括 tag 列)减去 TSMA 计算附加的四列,分别为 `_wstart`、`_wend`、`_wduration`,以及一个新增 tag 列 `tbname`,再减去原始表的 tag 列数。若列个数超出限制,会报 `Too many columns` 错误。
|
||||||
|
|
||||||
由于TSMA输出为一张超级表, 因此输出表的行长度受最大行长度限制, 不同函数的`中间结果`大小各异, 一般都大于原始数据大小, 若输出表的行长度大于最大行长度限制, 将会报`Row length exceeds max length`错误. 此时需要减少函数个数或者将常用的函数进行分组拆分到多个TSMA中.
|
由于 TSMA 输出为一张超级表,因此输出表的行长度受最大行长度限制,不同函数的 `中间结果` 大小各异,一般都大于原始数据大小,若输出表的行长度大于最大行长度限制,将会报 `Row length exceeds max length` 错误。此时需要减少函数个数或者将常用的函数进行分组拆分到多个 TSMA 中。
|
||||||
|
|
||||||
窗口大小的限制为[1m ~ 1y/12n]. INTERVAL 的单位与查询中INTERVAL子句相同, 如 a (毫秒), b (纳秒), h (小时), m (分钟), s (秒), u (微秒), d (天), w(周), n(月), y(年).
|
窗口大小的限制为 [1m ~ 1y/12n]。INTERVAL 的单位与查询中 INTERVAL 子句相同,如 a(毫秒)、b(纳秒)、h(小时)、m(分钟)、s(秒)、u(微秒)、d(天)、w(周)、n(月)、y(年)。
|
||||||
|
|
||||||
TSMA为库内对象, 但名字全局唯一. 集群内一共可创建TSMA个数受参数`maxTsmaNum`限制, 参数默认值为3, 范围: [0-3]. 注意, 由于TSMA后台计算使用流计算, 因此每创建一条TSMA, 将会创建一条流, 因此能够创建的TSMA条数也受当前已经存在的流条数和最大可创建流条数限制.
|
TSMA 为库内对象,但名字全局唯一。集群内一共可创建 TSMA 个数受参数 `maxTsmaNum` 限制,参数默认值为 3,范围:[0-3]。注意,由于 TSMA 后台计算使用流计算,因此每创建一条 TSMA,将会创建一条流,因此能够创建的 TSMA 条数也受当前已经存在的流条数和最大可创建流条数限制。
|
||||||
|
|
||||||
## 支持的函数列表
|
## 支持的函数列表
|
||||||
| 函数| 备注 |
|
| 函数| 备注 |
|
||||||
|
@ -44,65 +46,64 @@ TSMA为库内对象, 但名字全局唯一. 集群内一共可创建TSMA个数
|
||||||
|first||
|
|first||
|
||||||
|last||
|
|last||
|
||||||
|avg||
|
|avg||
|
||||||
|count| 若想使用count(*), 则应创建count(ts)函数|
|
|count| 若想使用 count(*),则应创建 count(ts) 函数|
|
||||||
|spread||
|
|spread||
|
||||||
|stddev||
|
|stddev||
|
||||||
|||
|
|||
|
||||||
|
|
||||||
## 删除TSMA
|
## 删除 TSMA
|
||||||
```sql
|
```sql
|
||||||
DROP TSMA [db_name.]tsma_name;
|
DROP TSMA [db_name.]tsma_name;
|
||||||
```
|
```
|
||||||
若存在其他TSMA基于当前被删除TSMA创建, 则删除操作报`Invalid drop base tsma, drop recursive tsma first`错误. 因此需先删除 所有Recursive TSMA.
|
若存在其他 TSMA 基于当前被删除 TSMA 创建,则删除操作报 `Invalid drop base tsma, drop recursive tsma first` 错误。因此需先删除 所有 Recursive TSMA。
|
||||||
|
|
||||||
## TSMA的计算
|
## TSMA 的计算
|
||||||
TSMA的计算结果为与原始表相同库下的一张超级表, 此表用户不可见. 不可删除, 在`DROP TSMA`时自动删除. TSMA的计算是通过流计算完成的, 此过程为后台异步过程, TSMA的计算结果不保证实时性, 但可以保证最终正确性.
|
TSMA 的计算结果为与原始表相同库下的一张超级表,此表用户不可见。不可删除,在 `DROP TSMA` 时自动删除。TSMA 的计算是通过流计算完成的,此过程为后台异步过程,TSMA 的计算结果不保证实时性,但可以保证最终正确性。
|
||||||
|
|
||||||
TSMA计算时若原始子表内没有数据, 则可能不会创建对应的输出子表, 因此在count查询中, 即使配置了`countAlwaysReturnValue`, 也不会返回该表的结果.
|
TSMA 计算时若原始子表内没有数据,则可能不会创建对应的输出子表,因此在 count 查询中,即使配置了 `countAlwaysReturnValue`,也不会返回该表的结果。
|
||||||
|
|
||||||
当存在大量历史数据时, 创建TSMA之后, 流计算将会首先计算历史数据, 此期间新创建的TSMA不会被使用. 数据更新删除或者过期数据到来时自动重新计算影响部分数据。 在重新计算期间 TSMA 查询结果不保证实时性。若希望查询实时数据, 可以通过在 SQL 中添加 hint `/*+ skip_tsma() */` 或者关闭参数`querySmaOptimize`从原始数据查询。
|
当存在大量历史数据时,创建 TSMA 之后,流计算将会首先计算历史数据,此期间新创建的 TSMA 不会被使用。数据更新删除或者过期数据到来时自动重新计算影响部分数据。在重新计算期间 TSMA 查询结果不保证实时性。若希望查询实时数据,可以通过在 SQL 中添加 hint `/*+ skip_tsma() */` 或者关闭参数 `querySmaOptimize` 从原始数据查询。
|
||||||
|
|
||||||
## TSMA的使用与限制
|
## TSMA 的使用与限制
|
||||||
|
|
||||||
客户端配置参数: `querySmaOptimize`, 用于控制查询时是否使用TSMA, `True`为使用, `False`为不使用即从原始数据查询.
|
- 客户端配置参数:`querySmaOptimize`,用于控制查询时是否使用TSMA,`True`为使用,`False` 为不使用即从原始数据查询。
|
||||||
|
- 客户端配置参数:`maxTsmaCalcDelay`,单位为秒,用于控制用户可以接受的 TSMA 计算延迟,若 TSMA 的计算进度与最新时间差距在此范围内,则该 TSMA 将会被使用,若超出该范围,则不使用,默认值:600(10 分钟),最小值:600(10 分钟),最大值:86400(1 天)。
|
||||||
|
- 客户端配置参数:`tsmaDataDeleteMark`,单位毫秒,与流计算参数 `deleteMark` 一致,用于控制流计算中间结果的保存时间,默认值为 1d,最小值为 1h。因此那些距最后一条数据时间大于配置参数的历史数据将不保存流计算中间结果,因此若修改这些时间窗口内的数据,TSMA 的计算结果中将不包含更新的结果。即与查询原始数据结果将不一致。
|
||||||
|
|
||||||
客户端配置参数:`maxTsmaCalcDelay`,单位 s,用于控制用户可以接受的 TSMA 计算延迟,若 TSMA 的计算进度与最新时间差距在此范围内, 则该 TSMA 将会被使用, 若超出该范围, 则不使用, 默认值: 600(10 分钟), 最小值: 600(10 分钟), 最大值: 86400(1 天).
|
### 查询时使用 TSMA
|
||||||
|
|
||||||
客户端配置参数: `tsmaDataDeleteMark`, 单位毫秒, 与流计算参数`deleteMark`一致, 用于控制流计算中间结果的保存时间, 默认值为: 1d, 最小值为1h. 因此那些距最后一条数据时间大于配置参数的历史数据将不保存流计算中间结果, 因此若修改这些时间窗口内的数据, TSMA的计算结果中将不包含更新的结果. 即与查询原始数据结果将不一致.
|
已在 TSMA 中定义的 agg 函数在大部分查询场景下都可直接使用,若存在多个可用的 TSMA,优先使用大窗口的 TSMA,未闭合窗口通过查询小窗口 TSMA 或者原始数据计算。同时也有某些场景不能使用 TSMA(见下文)。不可用时整个查询将使用原始数据进行计算。
|
||||||
|
|
||||||
### 查询时使用TSMA
|
未指定窗口大小的查询语句默认优先使用包含所有查询聚合函数的最大窗口 TSMA 进行数据的计算。如 `SELECT COUNT(*) FROM stable GROUP BY tbname` 将会使用包含 count(ts) 且窗口最大的 TSMA。因此若使用聚合查询频率高时,应当尽可能创建大窗口的 TSMA。
|
||||||
|
|
||||||
已在 TSMA 中定义的 agg 函数在大部分查询场景下都可直接使用, 若存在多个可用的 TSMA, 优先使用大窗口的 TSMA, 未闭合窗口通过查询小窗口TSMA或者原始数据计算。 同时也有某些场景不能使用 TSMA(见下文)。 不可用时整个查询将使用原始数据进行计算。
|
指定窗口大小时即 `INTERVAL` 语句,使用最大的可整除窗口 TSMA。窗口查询中,`INTERVAL` 的窗口大小、`OFFSET` 以及 `SLIDING` 都影响能使用的 TSMA 窗口大小。因此若使用窗口查询较多时,需要考虑经常查询的窗口大小,以及 offset、sliding 大小来创建 TSMA。
|
||||||
|
|
||||||
未指定窗口大小的查询语句默认优先使用包含所有查询聚合函数的最大窗口 TSMA 进行数据的计算。 如`SELECT COUNT(*) FROM stable GROUP BY tbname`将会使用包含count(ts)且窗口最大的TSMA。因此若使用聚合查询频率高时, 应当尽可能创建大窗口的TSMA.
|
例如 创建 TSMA 窗口大小 `5m` 一条,`10m` 一条,查询时 `INTERVAL(30m)`,那么优先使用 `10m` 的 TSMA,若查询为 `INTERVAL(30m, 10m) SLIDING(5m)`,那么仅可使用 `5m` 的 TSMA 查询。
|
||||||
|
|
||||||
指定窗口大小时即 `INTERVAL` 语句,使用最大的可整除窗口 TSMA。 窗口查询中, `INTERVAL` 的窗口大小, `OFFSET` 以及 `SLIDING` 都影响能使用的 TSMA 窗口大小, 可整 除窗口 TSMA 即 TSMA 窗口大小可被查询语句的 `INTERVAL, OFFSET, SLIDING` 整除的窗口。因此若使用窗口查询较多时, 需要考虑经常查询的窗口大小, 以及 offset, sliding大小来创建TSMA.
|
|
||||||
|
|
||||||
例 1. 如 创建 TSMA 窗口大小 `5m` 一条, `10m` 一条, 查询时 `INTERVAL(30m)`, 那么优先使用 `10m` 的 TSMA, 若查询为 `INTERVAL(30m, 10m) SLIDING(5m)`, 那么仅可使用 `5m` 的 TSMA 查询。
|
|
||||||
|
|
||||||
|
|
||||||
### 查询限制
|
### 查询限制
|
||||||
|
|
||||||
在开启了参数`querySmaOptimize`并且无`skip_tsma()` hint时, 以下查询场景无法使用TSMA:
|
在开启了参数 `querySmaOptimize` 并且无 `skip_tsma()` hint 时,以下查询场景无法使用 TSMA。
|
||||||
|
|
||||||
- 某个TSMA 中定义的 agg 函数不能覆盖当前查询的函数列表时
|
- 某个 TSMA 中定义的 agg 函数不能覆盖当前查询的函数列表时
|
||||||
- 非 `INTERVAL` 的其他窗口,或者 `INTERVAL` 查询窗口大小(包括 `INTERVAL,SLIDING,OFFSET`)不是定义窗口的整数倍,如定义窗口为 2m,查询使用 5 分钟窗口,但若存在 1m 的窗口,则可以使用。
|
- 非 `INTERVAL` 的其他窗口,或者 `INTERVAL` 查询窗口大小(包括 `INTERVAL,SLIDING,OFFSET`)不是定义窗口的整数倍,如定义窗口为 2m,查询使用 5 分钟窗口,但若存在 1m 的窗口,则可以使用。
|
||||||
- 查询 `WHERE` 条件中包含任意普通列(非主键时间列)的过滤。
|
- 查询 `WHERE` 条件中包含任意普通列(非主键时间列)的过滤。
|
||||||
- `PARTITION` 或者 `GROUY BY` 包含任意普通列或其表达式时
|
- `PARTITION` 或者 `GROUY BY` 包含任意普通列或其表达式时
|
||||||
- 可以使用其他更快的优化逻辑时, 如last cache优化, 若符合last优化的条件, 则先走last 优化, 无法走last时, 再判断是否可以走tsma优化
|
- 可以使用其他更快的优化逻辑时,如 last cache 优化,若符合 last 优化的条件,则先走 last 优化,无法走 last 时,再判断是否可以走 tsma 优化
|
||||||
- 当前 TSMA 计算进度延迟大于配置参数 `maxTsmaCalcDelay`时
|
- 当前 TSMA 计算进度延迟大于配置参数 `maxTsmaCalcDelay`时
|
||||||
|
|
||||||
下面是一些例子:
|
下面是一些例子:
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
SELECT agg_func_list [, pesudo_col_list] FROM stable WHERE exprs [GROUP/PARTITION BY [tbname] [, tag_list]] [HAVING ...] [INTERVAL(time_duration, offset) SLIDING(duration)]...;
|
SELECT agg_func_list [, pesudo_col_list] FROM stable WHERE exprs [GROUP/PARTITION BY [tbname] [, tag_list]] [HAVING ...] [INTERVAL(time_duration, offset) SLIDING(duration)]...;
|
||||||
|
|
||||||
-- 创建
|
-- 创建
|
||||||
CREATE TSMA tsma1 ON stable FUNCTION(COUNT(ts), SUM(c1), SUM(c3), MIN(c1), MIN(c3), AVG(c1)) INTERVAL(1m);
|
CREATE TSMA tsma1 ON stable FUNCTION(COUNT(ts), SUM(c1), SUM(c3), MIN(c1), MIN(c3), AVG(c1)) INTERVAL(1m);
|
||||||
|
|
||||||
-- 查询
|
-- 查询
|
||||||
SELECT COUNT(*), SUM(c1) + SUM(c3) FROM stable; ---- use tsma1
|
SELECT COUNT(*), SUM(c1) + SUM(c3) FROM stable; ---- use tsma1
|
||||||
SELECT COUNT(*), AVG(c1) FROM stable GROUP/PARTITION BY tbname, tag1, tag2; --- use tsma1
|
SELECT COUNT(*), AVG(c1) FROM stable GROUP/PARTITION BY tbname, tag1, tag2; --- use tsma1
|
||||||
SELECT COUNT(*), MIN(c1) FROM stable INTERVAL(1h); ---use tsma1
|
SELECT COUNT(*), MIN(c1) FROM stable INTERVAL(1h); --- use tsma1
|
||||||
SELECT COUNT(*), MIN(c1), SPREAD(c1) FROM stable INTERVAL(1h); ----- can't use, spread func not defined, although SPREAD can be calculated by MIN and MAX which are defined.
|
SELECT COUNT(*), MIN(c1), SPREAD(c1) FROM stable INTERVAL(1h); ----- can't use, spread func not defined, although SPREAD can be calculated by MIN and MAX which are defined.
|
||||||
SELECT COUNT(*), MIN(c1) FROM stable INTERVAL(30s); ----- can't use tsma1, time_duration not fit. Normally, query_time_duration should be multple of create_duration.
|
SELECT COUNT(*), MIN(c1) FROM stable INTERVAL(30s); ----- can't use tsma1, time_duration not fit. Normally, query_time_duration should be multple of create_duration.
|
||||||
SELECT COUNT(*), MIN(c1) FROM stable where c2 > 0; ---- can't use tsma1, can't do c2 filtering
|
SELECT COUNT(*), MIN(c1) FROM stable where c2 > 0; ---- can't use tsma1, can't do c2 filtering
|
||||||
|
@ -113,10 +114,10 @@ SELECT MIN(c3), MIN(c2) FROM stable INTERVAL(1m); ---- can't use tsma1, c2 is no
|
||||||
CREATE RECURSIVE TSMA tsma2 on tsma1 INTERVAL(1h);
|
CREATE RECURSIVE TSMA tsma2 on tsma1 INTERVAL(1h);
|
||||||
SELECT COUNT(*), SUM(c1) FROM stable; ---- use tsma2
|
SELECT COUNT(*), SUM(c1) FROM stable; ---- use tsma2
|
||||||
SELECT COUNT(*), AVG(c1) FROM stable GROUP/PARTITION BY tbname, tag1, tag2; --- use tsma2
|
SELECT COUNT(*), AVG(c1) FROM stable GROUP/PARTITION BY tbname, tag1, tag2; --- use tsma2
|
||||||
SELECT COUNT(*), MIN(c1) FROM stable INTERVAL(2h); ---use tsma2
|
SELECT COUNT(*), MIN(c1) FROM stable INTERVAL(2h); --- use tsma2
|
||||||
SELECT COUNT(*), MIN(c1) FROM stable WHERE ts < '2023-01-01 10:10:10' INTERVAL(30m); --use tsma1
|
SELECT COUNT(*), MIN(c1) FROM stable WHERE ts < '2023-01-01 10:10:10' INTERVAL(30m); --use tsma1
|
||||||
SELECT COUNT(*), MIN(c1) + MIN(c3) FROM stable INTERVAL(30m); ---use tsma1
|
SELECT COUNT(*), MIN(c1) + MIN(c3) FROM stable INTERVAL(30m); --- use tsma1
|
||||||
SELECT COUNT(*), MIN(c1) FROM stable INTERVAL(1h) SLIDING(30m); ---use tsma1
|
SELECT COUNT(*), MIN(c1) FROM stable INTERVAL(1h) SLIDING(30m); --- use tsma1
|
||||||
SELECT COUNT(*), MIN(c1), SPREAD(c1) FROM stable INTERVAL(1h); ----- can't use tsma1 or tsma2, spread func not defined
|
SELECT COUNT(*), MIN(c1), SPREAD(c1) FROM stable INTERVAL(1h); ----- can't use tsma1 or tsma2, spread func not defined
|
||||||
SELECT COUNT(*), MIN(c1) FROM stable INTERVAL(30s); ----- can't use tsma1 or tsma2, time_duration not fit. Normally, query_time_duration should be multple of create_duration.
|
SELECT COUNT(*), MIN(c1) FROM stable INTERVAL(30s); ----- can't use tsma1 or tsma2, time_duration not fit. Normally, query_time_duration should be multple of create_duration.
|
||||||
SELECT COUNT(*), MIN(c1) FROM stable where c2 > 0; ---- can't use tsma1 or tsam2, can't do c2 filtering
|
SELECT COUNT(*), MIN(c1) FROM stable where c2 > 0; ---- can't use tsma1 or tsam2, can't do c2 filtering
|
||||||
|
@ -124,15 +125,15 @@ SELECT COUNT(*), MIN(c1) FROM stable where c2 > 0; ---- can't use tsma1 or tsam2
|
||||||
|
|
||||||
### 使用限制
|
### 使用限制
|
||||||
|
|
||||||
创建TSMA之后, 对原始超级表的操作有以下限制:
|
创建 TSMA 之后,对原始超级表的操作有以下限制:
|
||||||
|
|
||||||
- 必须删除该表上的所有TSMA才能删除该表.
|
- 必须删除该表上的所有 TSMA 才能删除该表。
|
||||||
- 原始表所有tag列不能删除, 也不能修改tag列名或子表的tag值, 必须先删除TSMA, 才能删除tag列.
|
- 原始表所有 tag 列不能删除,也不能修改 tag 列名或子表的 tag 值,必须先删除 TSMA,才能删除 tag 列。
|
||||||
- 若某些列被TSMA使用了, 则这些列不能被删除, 必须先删除TSMA. 添加列不受影响, 但是新添加的列不在任何TSMA中, 因此若要计算新增列, 需要新创建其他的TSMA.
|
- 若某些列被 TSMA 使用了,则这些列不能被删除,必须先删除 TSMA。添加列不受影响,但是新添加的列不在任何 TSMA 中,因此若要计算新增列,需要新创建其他的 TSMA。
|
||||||
|
|
||||||
## 查看TSMA
|
## 查看TSMA
|
||||||
```sql
|
```sql
|
||||||
SHOW [db_name.]TSMAS;
|
SHOW [db_name.]TSMAS;
|
||||||
SELECT * FROM information_schema.ins_tsma;
|
SELECT * FROM information_schema.ins_tsma;
|
||||||
```
|
```
|
||||||
若创建时指定的较多的函数, 且列名较长, 在显示函数列表时可能会被截断(目前最大支持输出256KB).
|
若创建时指定的较多的函数,且列名较长,在显示函数列表时可能会被截断(目前最大支持输出 256KB)。
|
||||||
|
|
|
@ -9,15 +9,15 @@ description: "TDengine 3.0 版本的语法变更说明"
|
||||||
| # | **元素** | **<div style={{width: 60}}>差异性</div>** | **说明** |
|
| # | **元素** | **<div style={{width: 60}}>差异性</div>** | **说明** |
|
||||||
| - | :------- | :-------- | :------- |
|
| - | :------- | :-------- | :------- |
|
||||||
| 1 | VARCHAR | 新增 | BINARY类型的别名。
|
| 1 | VARCHAR | 新增 | BINARY类型的别名。
|
||||||
| 2 | TIMESTAMP字面量 | 新增 | 新增支持 TIMESTAMP 'timestamp format' 语法。
|
| 2 | TIMESTAMP 字面量 | 新增 | 新增支持 TIMESTAMP 'timestamp format' 语法。
|
||||||
| 3 | _ROWTS伪列 | 新增 | 表示时间戳主键。是_C0伪列的别名。
|
| 3 | _ROWTS 伪列 | 新增 | 表示时间戳主键。是_C0伪列的别名。
|
||||||
| 4 | _IROWTS伪列 | 新增 | 用于返回 interp 函数插值结果对应的时间戳列。
|
| 4 | _IROWTS 伪列 | 新增 | 用于返回 interp 函数插值结果对应的时间戳列。
|
||||||
| 5 | INFORMATION_SCHEMA | 新增 | 包含各种SCHEMA定义的系统数据库。
|
| 5 | INFORMATION_SCHEMA | 新增 | 包含各种 SCHEMA 定义的系统数据库。
|
||||||
| 6 | PERFORMANCE_SCHEMA | 新增 | 包含运行信息的系统数据库。
|
| 6 | PERFORMANCE_SCHEMA | 新增 | 包含运行信息的系统数据库。
|
||||||
| 7 | 连续查询 | 废除 | 不再支持连续查询。相关的各种语法和接口废除。
|
| 7 | 连续查询 | 废除 | 不再支持连续查询。相关的各种语法和接口废除。
|
||||||
| 8 | 混合运算 | 增强 | 查询中的混合运算(标量运算和矢量运算混合)全面增强,SELECT的各个子句均全面支持符合语法语义的混合运算。
|
| 8 | 混合运算 | 增强 | 查询中的混合运算(标量运算和矢量运算混合)全面增强,SELECT 的各个子句均全面支持符合语法语义的混合运算。
|
||||||
| 9 | 标签运算 | 新增 |在查询中,标签列可以像普通列一样参与各种运算,用于各种子句。
|
| 9 | 标签运算 | 新增 |在查询中,标签列可以像普通列一样参与各种运算,用于各种子句。
|
||||||
| 10 | 时间线子句和时间函数用于超级表查询 | 增强 |没有PARTITION BY时,超级表的数据会被合并成一条时间线。
|
| 10 | 时间线子句和时间函数用于超级表查询 | 增强 |没有 PARTITION BY 时,超级表的数据会被合并成一条时间线。
|
||||||
| 11 | GEOMETRY | 新增 | 几何类型。
|
| 11 | GEOMETRY | 新增 | 几何类型。
|
||||||
|
|
||||||
## SQL 语句变更
|
## SQL 语句变更
|
||||||
|
@ -26,15 +26,15 @@ description: "TDengine 3.0 版本的语法变更说明"
|
||||||
|
|
||||||
| # | **语句** | **<div style={{width: 60}}>差异性</div>** | **说明** |
|
| # | **语句** | **<div style={{width: 60}}>差异性</div>** | **说明** |
|
||||||
| - | :------- | :-------- | :------- |
|
| - | :------- | :-------- | :------- |
|
||||||
| 1 | ALTER ACCOUNT | 废除 | 2.x中为企业版功能,3.0不再支持。语法暂时保留了,执行报“This statement is no longer supported”错误。
|
| 1 | ALTER ACCOUNT | 废除 | 2.x 中为企业版功能,3.0 不再支持。语法暂时保留,执行报 “This statement is no longer supported” 错误。
|
||||||
| 2 | ALTER ALL DNODES | 新增 | 修改所有DNODE的参数。
|
| 2 | ALTER ALL DNODES | 新增 | 修改所有 DNODE 的参数。
|
||||||
| 3 | ALTER DATABASE | 调整 | <p>废除</p><ul><li>QUORUM:写入需要的副本确认数。3.0 版本默认行为是强一致性,且不支持修改为弱一致性。</li><li>BLOCKS:VNODE使用的内存块数。3.0版本使用BUFFER来表示VNODE写入内存池的大小。</li><li>UPDATE:更新操作的支持模式。3.0版本所有数据库都支持部分列更新。</li><li>CACHELAST:缓存最新一行数据的模式。3.0版本用CACHEMODEL代替。</li><li>COMP:3.0版本暂不支持修改。</li></ul><p>新增</p><ul><li>CACHEMODEL:表示是否在内存中缓存子表的最近数据。</li><li>CACHESIZE:表示缓存子表最近数据的内存大小。</li><li>WAL_FSYNC_PERIOD:代替原FSYNC参数。</li><li>WAL_LEVEL:代替原WAL参数。</li><li>WAL_RETENTION_PERIOD:3.0.4.0版本新增,wal文件的额外保留策略,用于数据订阅。</li><li>WAL_RETENTION_SIZE:3.0.4.0版本新增,wal文件的额外保留策略,用于数据订阅。</li></ul><p>调整</p><ul><li>KEEP:3.0版本新增支持带单位的设置方式。</li></ul>
|
| 3 | ALTER DATABASE | 调整 | <p>废除</p><ul><li>QUORUM:写入需要的副本确认数。3.0 版本默认行为是强一致性,且不支持修改为弱一致性。</li><li>BLOCKS:VNODE使用的内存块数。3.0 版本使用 BUFFER 来表示 VNODE 写入内存池的大小。</li><li>UPDATE:更新操作的支持模式。3.0 版本所有数据库都支持部分列更新。</li><li>CACHELAST:缓存最新一行数据的模式。3.0 版本用 CACHEMODEL 代替。</li><li>COMP:3.0 版本暂不支持修改。</li></ul><p>新增</p><ul><li>CACHEMODEL:表示是否在内存中缓存子表的最近数据。</li><li>CACHESIZE:表示缓存子表最近数据的内存大小。</li><li>WAL_FSYNC_PERIOD:代替原 FSYNC 参数。</li><li>WAL_LEVEL:代替原 WAL 参数。</li><li>WAL_RETENTION_PERIOD:v3.0.4.0 新增,WAL 文件的额外保留策略,用于数据订阅。</li><li>WAL_RETENTION_SIZE:v3.0.4.0 新增,WAL 文件的额外保留策略,用于数据订阅。</li></ul><p>调整</p><ul><li>KEEP:3.0 版本新增支持带单位的设置方式。</li></ul>
|
||||||
| 4 | ALTER STABLE | 调整 | 废除<ul><li>CHANGE TAG:修改标签列的名称。3.0版本使用RENAME TAG代替。<br/>新增</li><li>RENAME TAG:代替原CHANGE TAG子句。</li><li>COMMENT:修改超级表的注释。</li></ul>
|
| 4 | ALTER STABLE | 调整 | 废除<ul><li>CHANGE TAG:修改标签列的名称。3.0 版本使用 RENAME TAG 代替。<br/>新增</li><li>RENAME TAG:代替原 CHANGE TAG 子句。</li><li>COMMENT:修改超级表的注释。</li></ul>
|
||||||
| 5 | ALTER TABLE | 调整 | 废除<ul><li>CHANGE TAG:修改标签列的名称。3.0版本使用RENAME TAG代替。<br/>新增</li><li>RENAME TAG:代替原CHANGE TAG子句。</li><li>COMMENT:修改表的注释。</li><li>TTL:修改表的生命周期。</li></ul>
|
| 5 | ALTER TABLE | 调整 | 废除<ul><li>CHANGE TAG:修改标签列的名称。3.0 版本使用 RENAME TAG 代替。<br/>新增</li><li>RENAME TAG:代替原 CHANGE TAG 子句。</li><li>COMMENT:修改表的注释。</li><li>TTL:修改表的生命周期。</li></ul>
|
||||||
| 6 | ALTER USER | 调整 | 废除<ul><li>PRIVILEGE:修改用户权限。3.0版本使用GRANT和REVOKE来授予和回收权限。<br/>新增</li><li>ENABLE:启用或停用此用户。</li><li>SYSINFO:修改用户是否可查看系统信息。</li></ul>
|
| 6 | ALTER USER | 调整 | 废除<ul><li>PRIVILEGE:修改用户权限。3.0 版本使用 GRANT 和 REVOKE 来授予和回收权限。<br/>新增</li><li>ENABLE:启用或停用此用户。</li><li>SYSINFO:修改用户是否可查看系统信息。</li></ul>
|
||||||
| 7 | COMPACT VNODES | 暂不支持 | 整理指定VNODE的数据。3.0.0版本暂不支持。
|
| 7 | COMPACT VNODES | 暂不支持 | 整理指定 VNODE 的数据。
|
||||||
| 8 | CREATE ACCOUNT | 废除 | 2.x中为企业版功能,3.0不再支持。语法暂时保留了,执行报“This statement is no longer supported”错误。
|
| 8 | CREATE ACCOUNT | 废除 | 2.x 中为企业版功能,3.0 不再支持。语法暂时保留,执行报 “This statement is no longer supported” 错误。
|
||||||
| 9 | CREATE DATABASE | 调整 | <p>废除</p><ul><li>BLOCKS:VNODE使用的内存块数。3.0版本使用BUFFER来表示VNODE写入内存池的大小。</li><li>CACHE:VNODE使用的内存块的大小。3.0版本使用BUFFER来表示VNODE写入内存池的大小。</li><li>CACHELAST:缓存最新一行数据的模式。3.0版本用CACHEMODEL代替。</li><li>DAYS:数据文件存储数据的时间跨度。3.0版本使用DURATION代替。</li><li>FSYNC:当 WAL 设置为 2 时,执行 fsync 的周期。3.0版本使用WAL_FSYNC_PERIOD代替。</li><li>QUORUM:写入需要的副本确认数。3.0版本使用STRICT来指定强一致还是弱一致。</li><li>UPDATE:更新操作的支持模式。3.0版本所有数据库都支持部分列更新。</li><li>WAL:WAL 级别。3.0版本使用WAL_LEVEL代替。</li></ul><p>新增</p><ul><li>BUFFER:一个 VNODE 写入内存池大小。</li><li>CACHEMODEL:表示是否在内存中缓存子表的最近数据。</li><li>CACHESIZE:表示缓存子表最近数据的内存大小。</li><li>DURATION:代替原DAYS参数。新增支持带单位的设置方式。</li><li>PAGES:一个 VNODE 中元数据存储引擎的缓存页个数。</li><li>PAGESIZE:一个 VNODE 中元数据存储引擎的页大小。</li><li>RETENTIONS:表示数据的聚合周期和保存时长。</li><li>STRICT:表示数据同步的一致性要求。</li><li>SINGLE_STABLE:表示此数据库中是否只可以创建一个超级表。</li><li>VGROUPS:数据库中初始VGROUP的数目。</li><li>WAL_FSYNC_PERIOD:代替原FSYNC参数。</li><li>WAL_LEVEL:代替原WAL参数。</li><li>WAL_RETENTION_PERIOD:wal文件的额外保留策略,用于数据订阅。</li><li>WAL_RETENTION_SIZE:wal文件的额外保留策略,用于数据订阅。</li></ul><p>调整</p><ul><li>KEEP:3.0版本新增支持带单位的设置方式。</li></ul>
|
| 9 | CREATE DATABASE | 调整 | <p>废除</p><ul><li>BLOCKS:VNODE 使用的内存块数。3.0 版本使用 BUFFER 来表示 VNODE 写入内存池的大小。</li><li>CACHE:VNODE 使用的内存块的大小。3.0 版本使用 BUFFER 来表示 VNODE 写入内存池的大小。</li><li>CACHELAST:缓存最新一行数据的模式。3.0 版本用 CACHEMODEL 代替。</li><li>DAYS:数据文件存储数据的时间跨度。3.0 版本使用 DURATION 代替。</li><li>FSYNC:当 WAL 设置为 2 时,执行 fsync 的周期。3.0 版本使用 WAL_FSYNC_PERIOD 代替。</li><li>QUORUM:写入需要的副本确认数。3.0 版本使用 STRICT 来指定强一致还是弱一致。</li><li>UPDATE:更新操作的支持模式。3.0 版本所有数据库都支持部分列更新。</li><li>WAL:WAL 级别。3.0 版本使用 WAL_LEVEL 代替。</li></ul><p>新增</p><ul><li>BUFFER:一个 VNODE 写入内存池大小。</li><li>CACHEMODEL:表示是否在内存中缓存子表的最近数据。</li><li>CACHESIZE:表示缓存子表最近数据的内存大小。</li><li>DURATION:代替原 DAYS 参数。新增支持带单位的设置方式。</li><li>PAGES:一个 VNODE 中元数据存储引擎的缓存页个数。</li><li>PAGESIZE:一个 VNODE 中元数据存储引擎的页大小。</li><li>RETENTIONS:表示数据的聚合周期和保存时长。</li><li>STRICT:表示数据同步的一致性要求。</li><li>SINGLE_STABLE:表示此数据库中是否只可以创建一个超级表。</li><li>VGROUPS:数据库中初始 VGROUP 的数目。</li><li>WAL_FSYNC_PERIOD:代替原 FSYNC 参数。</li><li>WAL_LEVEL:代替原 WAL 参数。</li><li>WAL_RETENTION_PERIOD:WAL 文件的额外保留策略,用于数据订阅。</li><li>WAL_RETENTION_SIZE:WAL 文件的额外保留策略,用于数据订阅。</li></ul><p>调整</p><ul><li>KEEP:3.0 版本新增支持带单位的设置方式。</li></ul>
|
||||||
| 10 | CREATE DNODE | 调整 | 新增主机名和端口号分开指定语法<ul><li>CREATE DNODE dnode_host_name PORT port_val</li></ul>
|
| 10 | CREATE DNODE | 调整 | 新增主机名和端口号分开指定语法<ul><li>CREATE DNODE dnode_host_name PORT port_val</li></ul>
|
||||||
| 11 | CREATE INDEX | 新增 | 创建SMA索引。
|
| 11 | CREATE INDEX | 新增 | 创建SMA索引。
|
||||||
| 12 | CREATE MNODE | 新增 | 创建管理节点。
|
| 12 | CREATE MNODE | 新增 | 创建管理节点。
|
||||||
|
@ -43,7 +43,7 @@ description: "TDengine 3.0 版本的语法变更说明"
|
||||||
| 15 | CREATE STREAM | 新增 | 创建流。
|
| 15 | CREATE STREAM | 新增 | 创建流。
|
||||||
| 16 | CREATE TABLE | 调整 | 新增表参数语法<ul><li>COMMENT:表注释。</li><li>WATERMARK:指定窗口的关闭时间。</li><li>MAX_DELAY:用于控制推送计算结果的最大延迟。</li><li>ROLLUP:指定的聚合函数,提供基于多层级的降采样聚合结果。</li><li>SMA:提供基于数据块的自定义预计算功能。</li><li>TTL:用来指定表的生命周期的参数。</li></ul>
|
| 16 | CREATE TABLE | 调整 | 新增表参数语法<ul><li>COMMENT:表注释。</li><li>WATERMARK:指定窗口的关闭时间。</li><li>MAX_DELAY:用于控制推送计算结果的最大延迟。</li><li>ROLLUP:指定的聚合函数,提供基于多层级的降采样聚合结果。</li><li>SMA:提供基于数据块的自定义预计算功能。</li><li>TTL:用来指定表的生命周期的参数。</li></ul>
|
||||||
| 17 | CREATE TOPIC | 新增 | 创建订阅主题。
|
| 17 | CREATE TOPIC | 新增 | 创建订阅主题。
|
||||||
| 18 | DROP ACCOUNT | 废除 | 2.x中为企业版功能,3.0不再支持。语法暂时保留了,执行报“This statement is no longer supported”错误。
|
| 18 | DROP ACCOUNT | 废除 | 2.x 中为企业版功能,3.0 不再支持。语法暂时保留,执行报 “This statement is no longer supported” 错误。
|
||||||
| 19 | DROP CONSUMER GROUP | 新增 | 删除消费组。
|
| 19 | DROP CONSUMER GROUP | 新增 | 删除消费组。
|
||||||
| 20 | DROP INDEX | 新增 | 删除索引。
|
| 20 | DROP INDEX | 新增 | 删除索引。
|
||||||
| 21 | DROP MNODE | 新增 | 创建管理节点。
|
| 21 | DROP MNODE | 新增 | 创建管理节点。
|
||||||
|
@ -54,52 +54,52 @@ description: "TDengine 3.0 版本的语法变更说明"
|
||||||
| 26 | EXPLAIN | 新增 | 查看查询语句的执行计划。
|
| 26 | EXPLAIN | 新增 | 查看查询语句的执行计划。
|
||||||
| 27 | GRANT | 新增 | 授予用户权限。
|
| 27 | GRANT | 新增 | 授予用户权限。
|
||||||
| 28 | KILL TRANSACTION | 新增 | 终止管理节点的事务。
|
| 28 | KILL TRANSACTION | 新增 | 终止管理节点的事务。
|
||||||
| 29 | KILL STREAM | 废除 | 终止连续查询。3.0版本不再支持连续查询,而是用更通用的流计算来代替。
|
| 29 | KILL STREAM | 废除 | 终止连续查询。3.0 版本不再支持连续查询,而是用更通用的流计算来代替。
|
||||||
| 31 | REVOKE | 新增 | 回收用户权限。
|
| 31 | REVOKE | 新增 | 回收用户权限。
|
||||||
| 32 | SELECT | 调整 | <ul><li>SELECT关闭隐式结果列,输出列均需要由SELECT子句来指定。</li><li>DISTINCT功能全面支持。2.x版本只支持对标签列去重,并且不可以和JOIN、GROUP BY等子句混用。</li><li>JOIN功能增强。增加支持:JOIN后WHERE条件中有OR条件;JOIN后的多表运算;JOIN后的多表GROUP BY。</li><li>FROM后子查询功能大幅增强。不限制子查询嵌套层数;支持子查询和UNION ALL混合使用;移除其他一些之前版本的语法限制。</li><li>WHERE后可以使用任意的标量表达式。</li><li>GROUP BY功能增强。支持任意标量表达式及其组合的分组。</li><li>SESSION可以用于超级表了。没有PARTITION BY时,超级表的数据会被合并成一条时间线。</li><li>STATE_WINDOW可以用于超级表了。没有PARTITION BY时,超级表的数据会被合并成一条时间线。</li><li>ORDER BY功能大幅增强。不再必须和GROUP BY子句一起使用;不再有排序表达式个数的限制;增加支持NULLS FIRST/LAST语法功能;支持符合语法语义的任意表达式。</li><li>新增PARTITION BY语法。替代原来的GROUP BY tags。</li></ul>
|
| 32 | SELECT | 调整 | <ul><li>SELECT 关闭隐式结果列,输出列均需要由 SELECT 子句来指定。</li><li>DISTINCT 功能全面支持。2.x 版本只支持对标签列去重,并且不可以和 JOIN、GROUP BY 等子句混用。</li><li>JOIN 功能增强。增加支持:JOIN 后 WHERE 条件中有 OR 条件;JOIN 后的多表运算;JOIN 后的多表 GROUP BY。</li><li>FROM 后子查询功能大幅增强。不限制子查询嵌套层数;支持子查询和 UNION ALL 混合使用;移除其他一些之前版本的语法限制。</li><li>WHERE 后可以使用任意的标量表达式。</li><li>GROUP BY 功能增强。支持任意标量表达式及其组合的分组。</li><li>SESSION 可以用于超级表。之前版本,超级表的数据会被合并成一条时间线。</li><li>STATE_WINDOW 可以用于超级表。之前版本,超级表的数据会被合并成一条时间线。</li><li>ORDER BY 功能大幅增强。不再必须和 GROUP BY 子句一起使用;不再有排序表达式个数的限制;增加支持 NULLS FIRST/LAST 语法功能;支持符合语法语义的任意表达式。</li><li>新增 PARTITION BY 语法。替代原来的 GROUP BY tags。</li></ul>
|
||||||
| 33 | SHOW ACCOUNTS | 废除 | 2.x中为企业版功能,3.0不再支持。语法暂时保留了,执行报“This statement is no longer supported”错误。
|
| 33 | SHOW ACCOUNTS | 废除 | 2.x 中为企业版功能,3.0 不再支持。语法暂时保留,执行报 “This statement is no longer supported” 错误。
|
||||||
| 34 | SHOW APPS |新增 | 显示接入集群的应用(客户端)信息。
|
| 34 | SHOW APPS |新增 | 显示接入集群的应用(客户端)信息。
|
||||||
| 35 | SHOW CONSUMERS | 新增 | 显示当前数据库下所有活跃的消费者的信息。
|
| 35 | SHOW CONSUMERS | 新增 | 显示当前数据库下所有活跃的消费者的信息。
|
||||||
| 36 | SHOW DATABASES | 调整 | 3.0版本只显示数据库名。
|
| 36 | SHOW DATABASES | 调整 | 3.0 版本只显示数据库名。
|
||||||
| 37 | SHOW FUNCTIONS | 调整 | 3.0版本只显示自定义函数名。
|
| 37 | SHOW FUNCTIONS | 调整 | 3.0 版本只显示自定义函数名。
|
||||||
| 38 | SHOW LICENCE | 新增 | 和SHOW GRANTS 命令等效。
|
| 38 | SHOW LICENCE | 新增 | 和 SHOW GRANTS 命令等效。
|
||||||
| 39 | SHOW INDEXES | 新增 | 显示已创建的索引。
|
| 39 | SHOW INDEXES | 新增 | 显示已创建的索引。
|
||||||
| 40 | SHOW LOCAL VARIABLES | 新增 | 显示当前客户端配置参数的运行值。
|
| 40 | SHOW LOCAL VARIABLES | 新增 | 显示当前客户端配置参数的运行值。
|
||||||
| 41 | SHOW MODULES | 废除 | 显示当前系统中所安装的组件的信息。
|
| 41 | SHOW MODULES | 废除 | 显示当前系统中所安装的组件的信息。
|
||||||
| 42 | SHOW QNODES | 新增 | 显示当前系统中QNODE的信息。
|
| 42 | SHOW QNODES | 新增 | 显示当前系统中QNODE的信息。
|
||||||
| 43 | SHOW STABLES | 调整 | 3.0版本只显示超级表名。
|
| 43 | SHOW STABLES | 调整 | 3.0 版本只显示超级表名。
|
||||||
| 44 | SHOW STREAMS | 调整 | 2.x版本此命令显示系统中已创建的连续查询的信息。3.0版本废除了连续查询,用流代替。此命令显示已创建的流。
|
| 44 | SHOW STREAMS | 调整 | 2.x 版本此命令显示系统中已创建的连续查询的信息。3.0 版本废除了连续查询,用流代替。此命令显示已创建的流。
|
||||||
| 45 | SHOW SUBSCRIPTIONS | 新增 | 显示当前数据库下的所有的订阅关系
|
| 45 | SHOW SUBSCRIPTIONS | 新增 | 显示当前数据库下的所有的订阅关系
|
||||||
| 46 | SHOW TABLES | 调整 | 3.0版本只显示表名。
|
| 46 | SHOW TABLES | 调整 | 3.0 版本只显示表名。
|
||||||
| 47 | SHOW TABLE DISTRIBUTED | 新增 | 显示表的数据分布信息。代替2.x版本中的SELECT _block_dist() FROM \{ tb_name | stb_name }方式。
|
| 47 | SHOW TABLE DISTRIBUTED | 新增 | 显示表的数据分布信息。代替 2.x 版本中的 `SELECT _block_dist() FROM tb_name` 方式。
|
||||||
| 48 | SHOW TOPICS | 新增 | 显示当前数据库下的所有订阅主题。
|
| 48 | SHOW TOPICS | 新增 | 显示当前数据库下的所有订阅主题。
|
||||||
| 49 | SHOW TRANSACTIONS | 新增 | 显示当前系统中正在执行的事务的信息。
|
| 49 | SHOW TRANSACTIONS | 新增 | 显示当前系统中正在执行的事务的信息。
|
||||||
| 50 | SHOW DNODE VARIABLES | 新增 |显示指定DNODE的配置参数。
|
| 50 | SHOW DNODE VARIABLES | 新增 |显示指定 DNODE 的配置参数。
|
||||||
| 51 | SHOW VNODES | 暂不支持 | 显示当前系统中VNODE的信息。3.0.0版本暂不支持。
|
| 51 | SHOW VNODES | 暂不支持 | 显示当前系统中 VNODE 的信息。
|
||||||
| 52 | TRIM DATABASE | 新增 | 删除过期数据,并根据多级存储的配置归整数据。
|
| 52 | TRIM DATABASE | 新增 | 删除过期数据,并根据多级存储的配置归整数据。
|
||||||
| 53 | REDISTRIBUTE VGROUP | 新增 | 调整VGROUP中VNODE的分布。
|
| 53 | REDISTRIBUTE VGROUP | 新增 | 调整 VGROUP 中 VNODE 的分布。
|
||||||
| 54 | BALANCE VGROUP | 新增 | 自动调整VGROUP中VNODE的分布。
|
| 54 | BALANCE VGROUP | 新增 | 自动调整 VGROUP中 VNODE 的分布。
|
||||||
|
|
||||||
## SQL 函数变更
|
## SQL 函数变更
|
||||||
|
|
||||||
| # | **函数** | ** <div style={{width: 60}}>差异性</div> ** | **说明** |
|
| # | **函数** | ** <div style={{width: 60}}>差异性</div> ** | **说明** |
|
||||||
| - | :------- | :-------- | :------- |
|
| - | :------- | :-------- | :------- |
|
||||||
| 1 | TWA | 增强 | 可以直接用于超级表了。没有PARTITION BY时,超级表的数据会被合并成一条时间线。
|
| 1 | TWA | 增强 | 可以直接用于超级表。之前版本,超级表的数据会被合并成一条时间线。
|
||||||
| 2 | IRATE | 增强 | 可以直接用于超级表了。没有PARTITION BY时,超级表的数据会被合并成一条时间线。
|
| 2 | IRATE | 增强 | 可以直接用于超级表。之前版本,超级表的数据会被合并成一条时间线。
|
||||||
| 3 | LEASTSQUARES | 增强 | 可以用于超级表了。
|
| 3 | LEASTSQUARES | 增强 | 可以用于超级表。
|
||||||
| 4 | ELAPSED | 增强 | 可以直接用于超级表了。没有PARTITION BY时,超级表的数据会被合并成一条时间线。
|
| 4 | ELAPSED | 增强 | 可以直接用于超级表。之前版本,超级表的数据会被合并成一条时间线。
|
||||||
| 5 | DIFF | 增强 | 可以直接用于超级表了。没有PARTITION BY时,超级表的数据会被合并成一条时间线。
|
| 5 | DIFF | 增强 | 可以直接用于超级表。之前版本,超级表的数据会被合并成一条时间线。
|
||||||
| 6 | DERIVATIVE | 增强 | 可以直接用于超级表了。没有PARTITION BY时,超级表的数据会被合并成一条时间线。
|
| 6 | DERIVATIVE | 增强 | 可以直接用于超级表。之前版本,超级表的数据会被合并成一条时间线。
|
||||||
| 7 | CSUM | 增强 | 可以直接用于超级表了。没有PARTITION BY时,超级表的数据会被合并成一条时间线。
|
| 7 | CSUM | 增强 | 可以直接用于超级表。之前版本,超级表的数据会被合并成一条时间线。
|
||||||
| 8 | MAVG | 增强 | 可以直接用于超级表了。没有PARTITION BY时,超级表的数据会被合并成一条时间线。
|
| 8 | MAVG | 增强 | 可以直接用于超级表。之前版本,超级表的数据会被合并成一条时间线。
|
||||||
| 9 | SAMPLE | 增强 | 可以直接用于超级表了。没有PARTITION BY时,超级表的数据会被合并成一条时间线。
|
| 9 | SAMPLE | 增强 | 可以直接用于超级表。之前版本,超级表的数据会被合并成一条时间线。
|
||||||
| 10 | STATECOUNT | 增强 | 可以直接用于超级表了。没有PARTITION BY时,超级表的数据会被合并成一条时间线。
|
| 10 | STATECOUNT | 增强 | 可以直接用于超级表。之前版本,超级表的数据会被合并成一条时间线。
|
||||||
| 11 | STATEDURATION | 增强 | 可以直接用于超级表了。没有PARTITION BY时,超级表的数据会被合并成一条时间线。
|
| 11 | STATEDURATION | 增强 | 可以直接用于超级表。之前版本,超级表的数据会被合并成一条时间线。
|
||||||
| 12 | TIMETRUNCATE | 增强 | 增加ignore_timezone参数,可选是否使用,默认值为1.
|
| 12 | TIMETRUNCATE | 增强 | 增加 ignore_timezone 参数,可选是否使用,默认值为 1。
|
||||||
|
|
||||||
|
|
||||||
## SCHEMALESS 变更
|
## SCHEMALESS 变更
|
||||||
|
|
||||||
| # | **元素** | **<div style={{width: 60}}>差异性</div>** | **说明** |
|
| # | **元素** | **<div style={{width: 60}}>差异性</div>** | **说明** |
|
||||||
| - | :------- | :-------- | :------- |
|
| - | :------- | :-------- | :------- |
|
||||||
| 1 | 主键ts 变更为 _ts | 变更 | schemaless自动建的列名用 _ 开头,不同于2.x。
|
| 1 | 主键 ts 变更为 _ts | 变更 | schemaless 自动建的列名用 `_` 开头,不同于2.x。
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue